代码之家  ›  专栏  ›  技术社区  ›  Espo

在回发时设置视图状态

  •  5
  • Espo  · 技术社区  · 17 年前

    我试图在按下按钮时设置一个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中。

    1 回复  |  直到 7 年前
        1
  •  12
  •   Keith    17 年前

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

    基本顺序如下:

    • page init激发(init无法访问viewstate)
    • 读取视图状态
    • 页面加载火灾
    • 任何事件射击
    • 预燃火灾
    • 页面渲染