0

在 ASPX 页面中,我以编程方式填充表的行,方法是用内容填充服务器端字符串,然后将其放入带有构造的输出 HTML 中<tbody><%=mystring%></tbody>

行的<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 的表格行上使用内联按钮管理服务器端删除?

4

1 回答 1

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控件添加到 a TableCell,并将removeEmail()事件附加到此按钮。

祝你好运。

于 2013-01-28T16:42:26.700 回答