2011-06-21 78 views
0

單擊時我想刪除directory當其在hyperlink。我試圖像below.But我的網頁重定向到default(start) page點擊和directory不會刪除。刪除一個目錄超鏈接

protected void Page_Load(object sender, EventArgs e) 
{ 
    Execute(s,Content,k,j); 
} 

private void Execute(string path,string cont,string sym,string space) 
{ 
    foreach (var directory in new DirectoryInfo(path).GetDirectories()) 
    { 
     string f = directory.FullName; 
     f = Server.UrlPathEncode(f); 

     Response.Write("<a href =''" + "onclick='Delete(" + f + ")'> DELETE </a>"); 

     Execute(directory.FullName,cont1,sym1,space1); 
    } 
} 

private void Delete(string path) 
{ 
    DirectoryInfo DirDel = new DirectoryInfo(path); 
    DirDel.Delete(); 
} 

你能告訴我這段代碼的問題嗎?

回答

1

您正在渲染客戶端代碼,期望它調用服務器端代碼。這將永遠不會工作,客戶端總是發生在他們的機器上,而不是在你的服務器上。

你想要的是使用LinkButton控制,如:

<%@ Page Language="C#" AutoEventWireup="True" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>LinkButton Example</title> 
    <script language="C#" runat="server"> 

    protected void LinkButton_Click(Object sender, EventArgs e) 
    { 
     // Code to delete directory 
    } 

    </script>  
</head> 
<body> 

    <form id="form1" runat="server"> 
     <h3>LinkButton Example</h3> 

     <asp:LinkButton id="LinkButton1" 
      Text="Click Me" 
      Font-Names="Verdana" 
      Font-Size="14pt" 
      OnClick="LinkButton_Click" 
      runat="server"/> 

     <br /> 

     <asp:Label id="Label1" runat="server" /> 

    </form>  
</body> 
</html> 
+0

如何將它寫入.cs文件? – Naresh

+0

@ ILLUMINATI7590:''tag中的部分將作爲您的頁面類的一個方法放入您的單獨.cs文件中。你仍然需要aspx頁面。請參閱http://asp.net-tutorials.com/basics/code-behind/ –

+0

我知道這一點,但我想在需要的地方動態創建linkbutton,並且如何將路徑傳遞給LinkBut​​ton_Click。 – Naresh

0

您應該使用一個LinkBut​​ton獲得的外觀一樣,但你需要你的代碼在服務器端要執行的回傳爲你的LinkBut​​ton。

您在此處的代碼將調用客戶端腳本。

+0

您能告訴我如何編寫嗎? – Naresh

1

從你的問題,你有那個文件夾,如果它在客戶端,那麼我不認爲這是不可能的。

如果是在服務器端,你可以使用,而不是一個錨標記的鏈接按鈕運行背後的功能

代碼如果您不能使用鏈接按鈕出於某種原因,你可以使用JavaScript AJAX調用來調用函數後面的代碼。 這裏是一個code project article,可以幫助您

1

普遍問題是您創建客戶端的URL,但方法調用是服務器端。因此,您需要創建服務器端URL,並處理回發點擊:

string path = @"d:\Temp"; 

protected override void OnInit(EventArgs e) 
{ 
    string dir = this.Request["dir"]; 
    if (String.IsNullOrEmpty(dir)) // write links 
    { 
     foreach (var di in new DirectoryInfo(path).EnumerateDirectories()) 
     { 
      var link = new HyperLink() 
      { 
       Text = di.Name, 
       NavigateUrl = String.Format("?dir={0}", HttpUtility.UrlEncode(di.Name)) 
      }; 
      this.Controls.Add(link); 
     } 
    } 
    else // process link click 
    { 
     dir = HttpUtility.UrlDecode(dir); 
     path = Path.Combine(path, dir); 
     Directory.Delete(path); 

     Response.Redirect("~/Default.aspx"); // page's name to refresh content 
    } 
} 
+0

爲什麼這個if-else在這裏? – Naresh

+0

@ILLUMINATI:我更新了帖子,以便更加正確和明確 – abatishchev

+0

我編輯了我的代碼,您可以檢查它並告訴我該怎麼做?我無法理解你的方法。 – Naresh