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**
}
У меня есть страница, которая теряет данные в своем PostBack, несмотря на загружаемые элементы управленияна каждом Page_Load
.У меня есть asp:Panel
, который содержит asp:Table
.Таблица содержит только строку заголовка, поскольку строки строятся динамически в Page_Load
с помощью метода Build_Table()
, когда !IsPostBack
.Метод Build_Table()
отлично создает таблицу.Затем мы сохраняем таблицу в переменной Session с именем Table.За пределами !IsPostBack
я удаляю таблицу из элемента управления Panel, потому что идентификаторы следующей строки будут конфликтовать (я знаю, чтобы избежать этого, мне просто нужно создать всю таблицу в методе Build_Table()
).Затем я добавляю переменную Table-castted Session в Panel.До этого момента все работало нормально.Таблица корректно отображается на странице.
Проблема заключается в том, что, когда я нажимаю кнопку «Очистить» на странице, код переходит в цикле по каждой строке в таблице и снимает флажок в каждой строке.Во время отладки он говорит, что таблица имеет только 1 строку (строка статического заголовка, которую я имею в разметке HTML).В btnClear_Click
я даже добавил Table test = (Table)Session["Table"];
, чтобы убедиться, что переменная Session верна, и, как и ожидалось, возвращает полную таблицу.
Я всегда борюсь с PostBacks, поэтому мой вопрос, если Session ["Table"]Подтверждено, что он содержит всю таблицу как задумано, а переменная Session приведена и добавлена в контейнер за пределами !IsPostBack
, почему тогда таблица пуста в первой строке метода btnClear_Click
?