好吧,对于你们中的许多人来说,这个问题可能有一个非常明显的答案,但它让我很难过。
我有一个asp.net网页表单,在其上我有两个控件(好吧,这两个以上但我们会关注这些) - 第一个是 asp:dropdownlist 和第二个是 asp:table 。
这两个控件都在HTML端声明,并在代码隐藏页面中填充(添加了子控件)。
我的简单问题(希望通过一个简单的答案)是:
为什么viewstate会持续显示下拉列表,而不是表格?
我必须在每个页面加载时填写表格,但我可以填写下拉列表一次(使用Not Page.IsPostBack),并且它仍然存在。
注意:我已经阅读过有关ASP.NET页面生命周期的内容,并且我尝试将这些相同的调用放在Init()和PreInit()页面事件中,但结果相同。
我在这里错过了哪些明显的细节?
感谢您的帮助。
答案 0 :(得分:3)
你没有遗漏任何东西,你的评估是正确的。 ASP.NET表不会将其内容保存为查看状态。
我假设至少部分原因是一个表可以包含任意数量的任何类型的数据,并且在某些情况下可能真的开始添加到视图状态的大小。
无论哪种方式,这都是他们的工作方式。如果页面上有回发,则需要在每个加载事件上重新填充表,或者将表数据存储到自己查看状态,然后从数据中重新填充表。
答案 1 :(得分:3)
asp:table
对象不会将其内容存储在ViewState中,因为它不是数据绑定控件。它在这方面的作用与asp:panel
相同;如果以编程方式向其添加控件,则需要在每个回发时执行此操作,否则其中的项目将不会持续存在。
答案 2 :(得分:0)
如果你想在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
代码。
并没有直接回答你的问题,但认为它可能会有所帮助。