次のテスト ASP ページがあります。
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</div>
</form>
</body>
</html>
次のコード ビハインドを使用します。
public partial class test : System.Web.UI.Page
{
int x = 0;
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = x.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
x++;
Label1.Text = x.ToString();
}
}
Web プログラミング以外の考え方からすると、int x
これはテスト ページ クラスの一種のオブジェクト フィールドであり、x++
その値はx
ポストバックを通じて保持されると考えていましたが、そうではないようです。では、これらのフィールドは永続性に関してどのように機能するのでしょうか? Label1.Text
ボタンをクリックすると、最初にクリックしたときに 1 に変更されますが、その後は 1 を超えることができないため、奇妙だと思います。
また、なぜこれが起こっているのかを理解したら、私が最初に望んでいたことを実現する最も簡単な方法は何ですか? (x
ポストバック間で持続する値)
これは、私が探していたビューステートを使用して今のように見えるものです:
パブリック部分クラスのテスト: System.Web.UI.Page {
//static int x = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["x"] == null)
{
ViewState["x"] = 0;
Label1.Text = ViewState["x"].ToString();
}
//Label1.Text = x.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
ViewState["x"] = Convert.ToInt32(ViewState["x"].ToString()) + 1;
Label1.Text = ViewState["x"].ToString();
//x++;
//Label1.Text = x.ToString();
}
}