所以我试图在视图状态中保存一个变量,并在按下按钮后立即使用。问题是,在写东西之前,你必须按下两次按钮。在我看来,这段代码是一个问题,它可以归结为基础。
<%@ 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"]);
}
把它放在页面类中,它将在单击的单个按钮中工作