[英]Dynamicly generated html not firing onclick event
这是我的C#构建html。 我试图用onclick和onclientclick更改OnServerClick,结果是:
码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string[] filePaths = Directory.GetFiles(Server.MapPath("~/img/"));
List<ListItem> files = new List<ListItem>();
tabellaDownload.InnerHtml += "<table>";
foreach (string filePath in filePaths)
{
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
// tabellaDownload.InnerHtml += "<tr><td OnServerClick = 'DownloadFile' runat='server'>" + Path.GetFileName(filePath) + "<td></tr>";
tabellaDownload.InnerHtml += "<input type='button' runat='server' OnServerClick='DownloadFile' value='asd' />";
}
tabellaDownload.InnerHtml += "</table>";
string asd = "";
}
}
protected void DownloadFile(object sender, EventArgs e)
{
//do something
}
您想做的是在表单中添加一个控件,因此,如果您想动态地进行操作,则需要执行以下操作:
protected void Page_Load(object sender, EventArgs e)
{
HtmlButton b = new HtmlButton
b.ServerClick += MyEvent;
tabellaDownload.Controls.Add(b);
/* a table control doesn't accept a btn as child, you need to the exact td cell where insert the button*/
}
protected void MyEvent(object sender, EventArgs e)
{
}
Web表单中的所有内容都是控件集合中包含的控件。
Aspx文件以标记形式包含html和服务器指令的混合形式(您可以通过标记服务器指令的runat属性注意到差异),服务器端指令呈现为html标记以发送到浏览器,其方式类似于:
<input name="ctl00$MainContent$ctl00" onclick="__doPostBack('ctl00$MainContent$ctl00','')" type="button">
当您将字符串分配给控件的InnerHtml属性时,您发送的正是您要呈现的客户端内容,但是没有一个HTML特定的(或ecma特定的脚本)定义了runat属性!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.