2011-01-10 33 views
3

好吧,對於許多人來說,這個問題可能有一個超級明顯的答案,但它讓我難以置信。我有一個asp.net web窗體,並且我有兩個控件(好吧,超過這兩個,但我們將重點關注這些) - 第一個是asp:dropdownlist,第二個是asp:表爲什麼ASP.NET ViewState使用asp:dropdownlist而不是asp:表保留?

這兩個控件都是在HTML端聲明的,並且在代碼隱藏頁面中填充(添加了子控件)。

我簡單的問題(希望有一個簡單的答案)是這樣的:

爲什麼視圖狀態持續的下拉列表,而不是爲表?

我必須填寫每個頁面加載的表格,但我可以填充下拉列表一次(使用Not Page.IsPostBack),並且它仍然存在。

注意:我已閱讀了有關ASP.NET頁面的生命週期,並且我嘗試將這些相同的調用放在Init()和PreInit()頁面事件中,結果相同。

我在這裏遺漏了什麼明顯的細節?

感謝您的幫助。

回答

3

你不會錯過任何東西,你的評估是正確的。 ASP.NET表格不保存其內容以查看狀態。

我認爲至少部分原因是表可以包含任何數量的任何類型的數據,並且在某些情況下真的可以開始添加到視圖狀態的大小。

無論哪種方式,這是他們的工作方式。如果您的頁面可以回發,則需要在每個加載事件上重新填充表格,或者存儲表格數據以查看狀態,然後從數據中重新填充表格。

+0

謝謝,還有其他人。我想知道我是否失去了它。我已經在頁面加載時填充表格,所以...以後。 – Ducain 2011-01-10 01:28:18

3

asp:table對象不會將其內容存儲在ViewState中,因爲它不是數據綁定控件。它在這方面的作用與asp:panel相同;如果以編程方式向其添加控件,則需要在每個回發中執行此操作,否則其中的項目不會持續。

0

如果你想在視圖狀態下存儲表格的內容 - 我不建議這樣做,但有時你需要這麼做...你只需要使用標準的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標記。

不是真的直接回答你的問題,但認爲它可能有幫助。

相關問題