2012-06-14 235 views
1

根據候選人的回答,我對ASP.Net應用程序中ViewState的功能存在困惑。根據候選人如果您有一個具有某個值的控件並且您更改了該值,則在回發時它會將初始值以及更改後的值發送到服務器。因此,如果您繼續更改值並提交,則整個樹會發送到服務器。我試圖在網上搜索,但無法得到任何關於相同的事實。Viewstate是否保留歷史

如果上面的描述是混亂的,這裏是給對權利要求書更清晰的例子:
- 我們有<asp:TextBox ID="txt1" runat="Server" Text="First Value"/>
- 頁面加載後,我在txt1進入「二值」,然後點擊提交與同一頁再次加載(因爲我沒有在點擊事件中寫入邏輯)
- 現在我在txt1中輸入「Third Value」並再次點擊提交。

據我第一次打提交的候選人,無論是「第一個值」 &「二值」被髮送到服務器,並在之後的頁面加載,它加密這兩個值,並把它在ViewState所以當我第二次點擊提交時,視圖狀態中的加密值(同時具有「第一值」&「第二值」)和「第三值」一起被提交。

我不是來自工程背景,應聘者並聲稱這是他在大學教給他的。我只想知道這些說法中是否有任何真相。任何幫助表示讚賞。

回答

4

不,這是不正確的。

在第二次提交時,「Second Value」將作爲ViewState隱藏字段的一部分發送,「Third Value」作爲TextBox的值發送。

但是,所有這三個值都將在頁面生命週期的不同時間在服務器上可見(這可能是導致混淆的原因)。

  • 在頁面生命週期的初始階段,將設置「First Value」(來自頁面標記)。

  • 在LoadViewState階段,這將通過「第二值」(從視圖狀態)

  • 在LoadPostbackData階段,這將通過「第三值」來替換被替換。

在下一回傳(說「第四個值」),你就可以看到「第一個值」頁面生命週期過程中,「第三種價值」和「第四個值」在不同的時間,但「第二價值「將會消失。

+0

謝謝喬..這是我的假設,但想知道別人。我會等待更多的迴應以獲得一些見解。 – Wiz

+1

@Wiz,下面的文章是一個很好的起點:http://msdn.microsoft.com/en-us/library/ms972976.aspx – Joe