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

C# 动态生成的html不触发onclick事件,c#,html,asp.net,C#,Html,Asp.net,这是我的C#构建html。我尝试用onclick和onclientclick更改OnServerClick,结果是: Onserverclick不会激发任何东西 onclick给了我一个例外 这告诉我方法没有定义 onclientclick不支持 不要开枪 代码: 受保护的无效页面加载(对象发送方,事件参数e) { 如果(!IsPostBack) { 字符串[]filepath=Directory.GetFiles(Server.MapPath(“~/img/”); 列表文件=新列表();

这是我的C#构建html。我尝试用onclick和onclientclick更改OnServerClick,结果是:

  • Onserverclick不会激发任何东西
  • onclick给了我一个例外 这告诉我方法没有定义
  • onclientclick不支持 不要开枪
代码:

受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
字符串[]filepath=Directory.GetFiles(Server.MapPath(“~/img/”);
列表文件=新列表();
tabellaDownload.InnerHtml+=“”;
foreach(文件路径中的字符串文件路径)
{
添加(新列表项(Path.GetFileName(filePath),filePath));
//tabellaDownload.InnerHtml+=“”+Path.GetFileName(filePath)+“”;
tabellaDownload.InnerHtml+=“”;
}
tabellaDownload.InnerHtml+=“”;
字符串asd=“”;
}
}             
受保护的void下载文件(对象发送方,事件参数e)
{
//做点什么
}

您要做的是在表单中添加一个控件,因此如果您想动态执行此操作,您需要执行以下操作:

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属性

您好,这里您正在呈现一个带有runat=server属性的按钮,它不会在服务器上运行。您应该检查runat=server(webforms控件)的工作方式。即使我删除了runat=server,当您将字符串发送到InnerHtml属性时,它也不起作用,您发送的是要在浏览器中显示的内容!为了简化问题,浏览器不知道任何OnServerClick指令!只有asp.net引擎知道这一点!检查我的答案(已编辑!)我不想添加system.web.ui按钮和其他元素,我想做与从aspx页面添加时相同的事情(这是完美的选择)working@Lorenzo所以你可以试试这个:HtmlButton b=newhtmlbutton();b.ServerClick+=MyEvent;,然后添加到tabelladownload的控件中。您不能从html字符串指向服务器元素。在aspx文件中这样做时,您正在创建服务器指令,这些指令将呈现为html字符串。因此,这只是一种错觉,即在aspx中,您正在尝试执行的操作是有效的!
<input name="ctl00$MainContent$ctl00" onclick="__doPostBack('ctl00$MainContent$ctl00','')" type="button">