如何在ASPX中发布变量?

时间:2013-01-28 16:30:14

标签: asp.net

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

1 个答案:

答案 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()事件附加到此按钮。

祝你好运。