2008-09-03 12 views
5

ボタンを押したときにViewState変数を設定しようとしていますが、ボタンを2回クリックしたときにのみ機能します。コードビハインドは次のとおりです。ポストバックでviewstateを設定する

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString()); 
    } 
} 

private string YourName 
{ 
    get { return (string)ViewState["YourName"]; } 
    set { ViewState["YourName"] = value; } 
} 


protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    YourName = txtName.Text; 

} 

紛失しているものがありますか?正解サンプルは、非常に単純化している「の代わりにViewStateのtxtName.Textを使用」されていません:

<form id="form1" runat="server"> 
<div> 
Enter your name: <asp:TextBox runat="server" ID="txtName"></asp:TextBox> 
<asp:Button runat="server" ID="btnSubmit" Text="OK" onclick="btnSubmit_Click" /> 
<hr /> 
<label id="lblInfo" runat="server"></label> 
</div> 
</form> 

PS:ここでは、ちょうどPOCような非常に基本的な設計・ファイルの形式-一部でありますViewStateに情報が必要です。

答えて

12

Page_LoadbtnSubmit_Clickの前に発生します。

ポストバックイベントが発生した後に何かしたい場合は、Page_PreRenderを使用してください。

//this will work because YourName has now been set by the click event 
protected void Page_PreRender(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
     lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString()); 
} 

基本的な順序が行く:

  • ページのinit火災が
  • のViewStateは
  • ページのロード火災
  • 任意のイベントの火
  • のPreRender火災を読み込む(initがViewStateのにアクセスすることはできません)
  • ページレンダラー
関連する問題