HTML
<div class="row">
<div class="col-xs-2">
<asp:Panel runat="server" ID="pnlContainer">
<asp:Table runat="server" ID="tblMyTable" ClientIDMode="Static" CssClass="table table-condensed tale-bordered">
<asp:TableHeaderRow>
<asp:TableHeaderCell ColumnSpan="2">
<h4>Header Words</h4>
</asp:TableHeaderCell>
</asp:TableHeaderRow>
**TableRows created dynamically and contain a Checkbox**
</asp:Table>
</asp:Panel>
</div>
</div>
**Other HTML Markup**
<asp:Button runat="server" ID="btnClear" Text="Clear" OnClick="btnClear_Click" />
Page_Load
if (!IsPostBack)
{
Build_Table();
Session["Table"] = tblMyTable;
}
if (tblMyTable != null)
{
pnlContainer.Controls.Remove(tblMyTable);
}
pnlContainer.Controls.Add((Table)Session["Table"]);
btnClear_Click
foreach (TableRow tableRow in tblMyTable.Rows)
{
**more code**
}
尽管每个Page_Load
上都加载了控件,但我有一个页面在其PostBack中丢失了数据。我有一个asp:Panel
,其中有一个asp:Table
。该表仅具有标题行,因为当Page_Load
时,这些行是通过Build_Table()
方法在!IsPostBack
中动态构建的。 Build_Table()
方法可以很好地创建Table。然后,将表存储在称为表的Session变量中。在!IsPostBack
之外,我从面板控件中删除了Table,因为下一行ID会发生冲突(我知道要避免这种情况,我应该只在Build_Table()
方法中创建整个Table)。然后,我将表广播的Session变量添加到面板中。到目前为止,一切正常。表格在页面上正确显示。
问题是,当我单击页面上的“清除”按钮时,代码将循环遍历表中的每一行,并取消选中每一行上的复选框。调试时说表只有1行(我在HTML标记上有静态标头行)。在btnClear_Click
中,我甚至添加了Table test = (Table)Session["Table"];
以确保Session变量正确,并按预期返回了整个表。
我一直在为PostBacks奋斗,所以我的问题是,如果确认Session [“ Table”]能够按预期保存整个Table,并且将该Session变量强制转换并添加到!IsPostBack
之外的容器中,为什么那么Table是空的是btnClear_Click
方法的第一行吗?