我想在点击directory
时删除hyperlink
。我尝试如下。但我的网页重定向到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();
}
你能告诉我这段代码中的问题吗?
答案 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)
你应该使用LinkButton获得与之相同的外观,但是你需要在服务器端执行代码作为LinkButton的PostBack。
您在此处的代码将调用客户端脚本。