我试图在按钮点击事件中将整数值增加1,但是当我点击它时,它会第一次递增并保持不变,例如它不会增加到3。
public partial class Form : System.Web.UI.Page
{
int num = 1;
protected void Page_Load(object sender, EventArgs e)
{
Label_PageNumber.Text = "Page0" + num.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
num++;
Label_PageNumber.Text = "Page0" + num.ToString();
}
}
答案 0 :(得分:3)
全局变量在 PostBack 上初始化,之前的值丢失,如果您想要 PostBack 之间的值,可以使用ViewState
。
public partial class Form : System.Web.UI.Page
{
public int Num
{
get {
if(ViewState["num"] != null)
return int.Parse(ViewState["num"]);
else
return 0;
}
set { ViewState["num"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
Label_PageNumber.Text = "Page0" + Num.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
Num++;
Label_PageNumber.Text = "Page0" + Num.ToString();
}
}
全局变量的值丢失,因为Http是无状态协议。
stateless protocol (Http) 不需要HTTP服务器保留 有关每个用户的信息或状态,持续时间为多个 要求。但是,某些Web应用程序实现状态或服务器 使用例如HTTP cookie或隐藏变量的辅助会话 在网络表格中。
View state是ASP.NET页面中的存储库,可以存储在回发期间必须保留的值。页面框架使用视图状态在回发之间保持控制设置。
您可以在自己的应用程序中使用视图状态来执行以下操作:
在回发之间保留值,而不将其存储在会话状态或用户个人资料中。
存储您定义的页面或控件属性的值。
答案 1 :(得分:0)
问题是,当您点击按钮时,会生成一个PostBack,然后您的计数器将设置为1.使用会话来存储您当前的值!
public partial class _Default : System.Web.UI.Page
{
int num;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
num = 1;
Session["number"] = num;
Label_PageNumber.Text = "Page0" + num.ToString();
}
else
{
num = (int)Session["number"];
}
}
protected void Button1_Click(object sender, EventArgs e)
{
num++;
Session["number"] = num;
Label_PageNumber.Text = "Page0" + num.ToString();
}
}
答案 2 :(得分:0)
代码中的一个简单更改,将int变量设为静态:
public partial class Form : System.Web.UI.Page
{
static int num = 1;
protected void Page_Load(object sender, EventArgs e)
{
Label_PageNumber.Text = "Page0" + num.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
num++;
Label_PageNumber.Text = "Page0" + num.ToString();
}
}
答案 3 :(得分:0)
ASP.Net是无国籍的;这意味着你无法存储像win form这样的字段。正如Adil所说,您可以使用视图状态来存储值。另一种选择是使用Session
。使用Session
代替ViewState
有一些优势。
首先,您的页面会更亮,因为视图状态值嵌入在页面中。
其次,Session
更安全,因为它保留在服务器中,但视图状态值会发送到客户端。
第三,当你转到另一个页面时,你将丢失视图状态值。实际上,您将在新页面中显示上一页的字段(在某些情况下可能会有缺点)。
您应该知道Microsoft在没有ViewSate
的情况下引入了ASP.NET MVC。