繁体   English   中英

动态生成的html不触发onclick事件

[英]Dynamicly generated html not firing onclick event

这是我的C#构建html。 我试图用onclick和onclientclick更改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属性!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM