动态生成的html未触发onclick事件
本文关键字:onclick 事件 html 动态 | 更新日期: 2023-09-27 18:26:57
这是我的C#构建html。我试图用onclick和onclientlick更改OnServerClick,结果是:
- Onserverclick不会触发任何内容
- onclick给了我一个例外告诉我方法没有定义
- onclientclick不不点火
代码:
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属性!