Почему ASP.NET ViewState сохраняется с выпадающим списком asp:, но не с таблицей asp: - PullRequest
3 голосов
/ 10 января 2011

Хорошо, для многих из вас, вероятно, есть супер-очевидный ответ на этот вопрос, но он поставил меня в тупик.

У меня есть веб-форма asp.net, и на ней у меня есть два элемента управления (ну, больше, чем эти два, но мы сосредоточимся на них) - первый - asp: dropdownlist а второй - asp: таблица .

Оба эти элемента управления объявлены на стороне HTML и заполнены (добавлены дочерние элементы управления) на странице с выделенным кодом.

Мой простой вопрос (надеюсь, с простым ответом) таков:

Почему состояние просмотра сохраняется для выпадающего списка, а НЕ для таблицы?

IЯ должен заполнять таблицу при каждой загрузке страницы, но я могу заполнить раскрывающийся список один раз (используя Not Page.IsPostBack), и он сохраняется.

ПРИМЕЧАНИЕ. Я прочитал о жизненном цикле страниц ASP.NET иЯ попытался разместить эти же вызовы в событиях страницы Init () и PreInit () с одинаковыми результатами.

Какая очевидная деталь мне здесь не хватает?

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 10 января 2011

Объект asp:table не сохраняет свое содержимое в ViewState, поскольку он не является элементом управления с привязкой к данным.В этом отношении он работает так же, как asp:panel;если вы добавляете к нему элементы управления программным способом, вам нужно делать это на каждом постбеке, иначе элементы в нем не сохранятся.

3 голосов
/ 10 января 2011

Вы ничего не пропустили, ваша оценка верна. Таблицы ASP.NET не сохраняют свое содержимое для просмотра состояния.

Я предположил, что, по крайней мере, отчасти это связано с тем, что таблица может содержать любое количество данных любого типа и в некоторых случаях может реально добавить к размеру состояния просмотра.

В любом случае, так они работают. Если на вашей странице возможны обратные передачи, вам нужно либо повторно заполнить таблицу при каждом событии загрузки, либо сохранить данные таблицы, чтобы самостоятельно просмотреть состояние, а затем повторно заполнить таблицу из данных.

0 голосов
/ 10 января 2011

Если вы хотите хранить содержимое таблицы в viewstate - что я не рекомендую, но иногда вам нужно это делать ... вам просто нужно использовать стандартный элемент управления таблицей asp.net.

<asp:Table ID="Table1" runat="server">
    <asp:TableRow ID="TableRow1" runat="server">
        <asp:TableCell ID="TableCell1" runat="server">
        This is Cell 1
        </asp:TableCell>
        <asp:TableCell ID="TableCell2" runat="server">
        This is Cell 2
        </asp:TableCell>
    </asp:TableRow>
</asp:Table>

Вы можете узнать больше о том, как это сделать, на http://weblogs.asp.net/nannettethacker/archive/2008/01/24/html-tables-to-asp-net-table-controls.aspx.

Вы также можете попробовать добавить runat="server" в тег table.

Не совсемотвечая на ваш вопрос напрямую, но, тем не менее, подумал, что это может быть полезно.

...