【问题标题】:Setting viewstate on postback在回发时设置视图状态
【发布时间】:2008-09-03 10:37:43
【问题描述】:

我试图在按下按钮时设置 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;

}

我有什么遗漏吗?这是设计文件的表单部分,非常基本,就像 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>

PS:示例非常简化,“使用txtName.Text 代替 ViewState”不是正确答案,我需要将信息放在 ViewState 中。

【问题讨论】:

    标签: asp.net postback viewstate


    【解决方案1】:

    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());
    }
    

    基本顺序是:

    • 页面初始化触发(初始化无法访问 ViewState)
    • ViewState 已读取
    • 页面加载触发
    • 任何事件触发
    • PreRender 触发
    • 页面呈现

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多