【问题标题】:Deleting a directory when clicked on a hyperlink单击超链接时删除目录
【发布时间】:2011-06-21 17:03:32
【问题描述】:

我想在点击hyperlink 时删除directory。我尝试如下。但是我的页面重定向到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();
}

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

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

    从你的问题中不清楚,你有那个文件夹,如果它在客户端,那么我认为这是不可能的。

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

    如果由于某种原因您不能使用链接按钮,您可以使用 JavaScript ajax 调用来调用代码隐藏函数。 这是code project article,可能对你有帮助

    【讨论】:

      【解决方案2】:

      您正在渲染客户端代码,期望它调用服务器端代码。这永远不会起作用,客户端总是发生在他们的机器上,而不是你的服务器上。

      您想要的是使用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>
      

      【讨论】:

      • 如何将其写入.cs文件?
      • @ILLUMINATI7590:&lt;script language="C#" runat="server"&gt;&lt;/script&gt; 标记中的部分将作为页面类的方法放入单独的 .cs 文件中。您仍然需要 aspx 页面。见asp.net-tutorials.com/basics/code-behind
      • 我知道,但我想在需要的地方动态创建链接按钮,以及如何将路径传递给 LinkBut​​ton_Click。
      • @ILLUMINATI7590:有关示例,请参见 shahed-kazi.blogspot.com/2009/07/…。回覆。将路径传递给linkbutton_click,当您创建控件时,将目录存储在 Tag 属性中。当调用linkbutton_click 时,将发送者对象转换为linkbutton 并访问它的tag 属性。
      • 2011 年最好还是不要使用代码隐藏
      【解决方案3】:

      一般问题是您创建客户端 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
          }
      }
      

      【讨论】:

      • 我编辑了我的代码,你能检查一下并告诉我怎么做吗?我无法理解你的做法。
      • @ILLUMINATI:在加载时您需要检查,是否有任何点击(查询字符串包含目录名称),或者没有
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-15
        • 2013-08-26
        • 1970-01-01
        • 2016-04-10
        • 2016-01-01
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        相关资源
        最近更新 更多