单击超链接时删除目录

时间:2011-06-21 07:42:15

标签: c# .net asp.net

我想在点击directory时删除hyperlink。我尝试如下。但我的网页重定向到default(start) pagedirectory未删除

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();
}

你能告诉我这段代码中的问题吗?

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

从您的问题中不清楚,您拥有该文件夹的位置,如果是在客户端,那么我认为这是不可能的。

如果是在服务器端,您可以使用链接按钮而不是锚标记来运行功能背后的代码

如果由于某种原因你无法使用链接按钮,你可以使用JavaScript ajax调用来调用函数后面的代码。 这是code project article,可以帮助您

答案 2 :(得分: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
    }
}

答案 3 :(得分:0)

你应该使用LinkBut​​ton获得与之相同的外观,但是你需要在服务器端执行代码作为LinkBut​​ton的PostBack。

您在此处的代码将调用客户端脚本。