3

我的页面中有这个 JavaScript,它在表格中动态创建一些按钮,这些按钮必须调用服务器端的函数:

JavaScript 代码是这样的:

var rowContent = document.createElement('td');
rowContent.style.width = '12%';
var chk = document.createElement('input');
chk.type = 'submit';
chk.value = 'Adicionar';
chk.setAttribute('Id', 'Sub' +id);
chk.name = "ftps"
chk.setAttribute('runat', 'server');
chk.setAttribute('onserverclick', 'BtnAdicionar_Click');

rowContent.appendChild(chk);

而Server端函数是这样的:

public void BtnAdicionar_Click(object sender, EventArgs e)
{
   Response.Redirect("Default.aspx"); //just to see if something happens.
}

PS.:我在 MasterPage 中的页面中。

如果我得到 Google Chrome 的 Inspect Element 生成的按钮代码,它会给我这个:

<input type="submit" value="Adicionar" id="Sub1" name="ftps" runat="server" onserverclick="BtnAdicionar_Click">

如果我把这个 HTML 代码直接放在页面上,它就可以工作。只是在动态生成按钮时不起作用。

任何机构可以帮助我吗?

4

2 回答 2

2

您在这里缺少一些概念。

首先,无法使用 javascript 创建服务器元素,因为它是一种客户端语言。请记住,当您声明一个<asp:Button runat="server">标签时,它将由 ASP.NET 引擎解释并呈现为 HTML(<input type="submit" />在这种情况下)。此外,onserverclick事件不存在。

如果您确实需要使用 Javascript 创建此元素,您可以使用 jQuery on click 事件直接调用 ASP.NET AJAX 页面方法,如此处所述

更好的解决方案是在页面后面的代码中动态创建 Button,例如:

 TableCell td = new TableCell();
 Button button = new Button();
 button.Text = "Adicionar";
 button.ID = "Sub" + id; // Whatever "id" is
 button.Click += new EventHandler(BtnAdicionar_Click);
 td.Controls.Add(td);
于 2013-03-27T21:01:32.097 回答
0

您是否尝试将属性设置为:

chk.setAttribute('onclick', 'BtnAdicionar_Click');
于 2013-03-27T20:46:24.687 回答