在msdn上我們有這個http://msdn.microsoft.com/en-us/library/ms972976.aspx。 一般一個網站的生命看起來是這樣的: Initialization-> LoadViewState-> LoadPostBackData->負荷 - > RaisePostBackEvent-> SaveViewState->渲染ASP.NET文本框在回發後保留其文本屬性
我有一個佔位符,在我的aspx方面,它看起來是這樣的:
<asp:PlaceHolder ID="ph1" runat="server">
<asp:Button OnClick="ClickMe" ID="Button1" runat="server" Text="Button" />
</asp:PlaceHolder>
我創建的頁面加載事件兩個文本框的代碼如下所示:
for (int i = 0; i <2; i++)
{
TextBox tb = new TextBox();
tb.ID = "tb" + i.ToString();
tb.Text = "my test string";
ph1.Controls.Add(tb);
}
而且點擊按鈕事件看起來是這樣的:
protected void ClickMe(object sender, EventArgs e)
{
var mycontrols = ph1.Controls;
}
當我把sommething放入這些文本框並單擊該按鈕時,該頁面被回發,但我的文本框保存了輸入值,儘管我在頁面Load事件中更改了它們的文本屬性。這些控件是在LoadViewState和LoadPostBackData之後觸發的Load事件上動態創建的,所以它是如何工作的?什麼時候控制收到他們的postdata?
您正在動態創建對象 - 這意味着它們是內存中的新對象。以這種方式想想,在每一次頁面加載時,您都在重新創建文本框 - 因此儘管tb1是一個在回發時將值設置爲「foo」的對象,但您正在創建一個名爲tb2的新對象 - 它不會保留視圖狀態。 – RPM1984 2010-07-20 12:03:58
@ RPM1984這與viewstate – 2010-07-20 12:10:31
無關。但我的問題是,這些文本框保存在頁面上輸入的文本屬性。我看到頁面上的文本框,並輸入「我的文本blablabla」,然後我單擊按鈕,我的文本框仍然顯示「我的文本blablabla」,所以當新的文本框再次創建負載事件收到此屬性?這隻發生在動態創建的控件上......並且textbox在狀態視圖中沒有保留它的值,但是在回發數據中,可以關閉此控件的視圖狀態,並且在回發後仍然保持它的值 – shin 2010-07-20 12:15:05