从视图状态读取数据时发生延迟



所以我试图在视图状态中保存一个变量,并在按下按钮后立即使用。问题是,在写东西之前,你必须按下两次按钮。在我看来,这段代码是一个问题,它可以归结为基础。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
    <body>
        <form id="form1" runat="server">
            <asp:Button ID="Button1" runat="server" Text="Button 1" OnClick="Button1_Click" />
            <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button 2" />
        </form>
    </body>
</html>

在后面的代码中使用系统;

public partial class _Default:System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        Response.Write(ViewState["Button"]);
    }
    protected void Button1_Click(object sender, EventArgs e) {
        ViewState["Button"] = "Button 1";
    }
    protected void Button2_Click(object sender, EventArgs e) {
        ViewState["Button"] = "Button 2";
   }
}

您的页面加载事件发生在按钮单击事件之前,因此在第一个页面加载中,您查看的状态为空。

第一次点击按钮时,它仍然是空白的,因为页面加载是先调用,然后点击按钮。

现在第二次点击按钮查看状态有值,所以它会显示在你的页面上

在这里,您必须使用页面预渲染事件来显示视图状态值,如以下

protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            Response.Write(ViewState["Button"]);
        }

把它放在页面类中,它将在单击的单个按钮中工作

最新更新