我有通过javascript动态创建的输入按钮,它应该调用服务器c#函数,但它们不会

时间:2013-03-27 18:11:55

标签: javascript asp.net

我的页面中有这个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);

服务器端功能如下:

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代码直接放在页面上,它就可以了。只是在动态生成按钮时不起作用。

身体可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

你在这里缺少一些概念。

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

如果你真的需要用Javascript创建这个元素,可以在click事件上使用jQuery直接调用ASP.NET AJAX页面方法为described here

更好的解决方案是在页面后面的代码中动态创建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);

答案 1 :(得分:0)

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

chk.setAttribute('onclick', 'BtnAdicionar_Click');