在ASPX页面中,我通过用内容填充服务器端字符串,然后将其放在带有构造<tbody><%=mystring%></tbody>
的输出HTML中,以编程方式填充表的行。
该行的<td>
个元素之一是删除行的按钮,我需要将另一个<td>
元素传递给服务器。
在准备表的服务器端代码中,我尝试了:
string RowTemplate;
RowTemplate = "<tr><td>{0}</td><td>{1}</td><td>{2}</td><td><form action=\"/submit\" name=\"removeemail{0}\" runat=\"server\"><input custom=\"{1}\" class=\"btn icon-remove\" value=\"X\" onserverclick=\"RemoveEmail\" runat=\"server\"/></form></td></tr>";
然后,当我创建行时,占位符{0},{1}和{2}将被行的相应值替换。
这个想法是在名为RemoveEmail的服务器端函数中检索“自定义”属性(删除键),然后再次构建表而不删除行。
但是,似乎这个内联表单生成的HTML不是由ASPX引擎预处理的,因此到达浏览器的HTML代码直接是ASPX HTML标记。
我怎样才能预处理ASPX标记,使其行为与找到.aspx文件的静态ASPX标记完全相同?如果无法做到这一点,我怎样才能在ASPX中的表行上使用内联按钮管理服务器端删除?
答案 0 :(得分:1)
我不认为通过向这些runat="server"
添加HTML Controls
会使它们作为服务器端控件工作。您可以将runat="server"
添加到标记中,这样就可以了。这是我这样做的一种方式:
标记:
<body>
<form id="form1" runat="server">
<div>
<asp:Table runat="server" ID="tbl"></asp:Table>
</div>
</form>
</body>
代码背后:
TableRow tr = new TableRow();
tr.Cells.Add(new TableCell() { Text = "Argument0" });
tr.Cells.Add(new TableCell() { Text = "Argument1" });
tr.Cells.Add(new TableCell() { Text = "Argument2" });
TableCell td = new TableCell();
Button btn = new Button();
tr.Cells.Add(td);
btn.Text = "Remove Email";
btn.Click+=new EventHandler(removeEmail);
td.Controls.Add(btn);
this.tbl.Rows.Add(tr);
void removeEmail(object sender, EventArgs e)
{
//code here
}
这会将Button
控件添加到TableCell
,并将removeEmail()
事件附加到此按钮。