質問

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

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;

}

何か足りないものはありますか?これはデザインファイルのフォーム部分であり、非常に基本的なものです。 POC:

<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>

追伸: サンプルは非常に単純化されています。「使用 txtName.Text ViewState の代わりに」は正しい答えではありません。情報は ViewState にある必要があります。

役に立ちましたか?

解決

Page_Load 前に火事 btnSubmit_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());
}

基本的な順序は次のとおりです。

  • ページの初期化が実行されます (初期化は ViewState にアクセスできません)
  • ViewState が読み取られます
  • ページ読み込みの起動
  • あらゆるイベントが発生する
  • PreRender の起動
  • ページのレンダリング
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top