我有以下的測試ASP頁:做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
值在回發仍然存在)
這是它看起來像現在使用的ViewState這正是我一直在尋找:
公共部分類測試: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();
}
}
抱歉,我認爲這可能是http://stackoverflow.com/questions/7534946/are-public-properties-in-an-asp的副本-net-code-behind-supposed-to-persist-between-page?rq = 1或多或少>< – chilleo