ASP.Net c#变量不存储在网页上
本文关键字:网页 存储 Net 变量 ASP | 更新日期: 2023-09-27 18:19:12
所以我有代码…
int var1 = 0;
protected void cmdvar1_Click(object sender, EventArgs e)
{
var1= var1+ 10;
lblvar1.Text = var1.ToString();
}
当点击这个,它的伟大…它接受一个int,加上10,然后显示它…然而,它不会显示任何超过10,做了一些尝试,得出结论,这不是因为标签没有更新,它只是简单地没有在变量的前10上添加10。我做错了什么?我错过了什么?我需要将变量信息存储在cookie或其他东西吗?
这是由于ASP.NET的生命周期。将私有字段存储在网页后面与WinForms的工作方式不同。如果你想在post back之间持久化信息,你需要将其存储在一些持久化存储中,例如Session
/ViewState
/Database
等。
private int var1 = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// load var1 from cache
Int32.TryParse((Session["var1"] ?? 0).ToString(), out var1);
}
}
protected void cmdvar1_Click(object sender, EventArgs e)
{
var1 += 10;
Session["var1"] = var1; // cache var1
lblvar1.Text = var1.ToString();
}
所以我强烈建议你换个平台。也许ASP。净MVC……但是,您可以使用下面的内容来解决您的问题。
private int MyNum
{
get{ return (int)ViewState["MyNum"] ?? 0; }
set { ViewState["MyNum"] = value; }
}
然后使用MyNum作为递增的整数
假设lblvar1是一个Label控件,那么您可以执行以下操作。之所以这样做是因为。net会自动处理UIControl
的状态。protected void cmdvar1_Click(object sender, EventArgs e)
{
var var1 = Convert.ToInt32(lblvar1.Text);
var1= var1+ 10;
lblvar1.Text = var1.ToString();
}
正如评论中建议的那样,在你开始制作有意义的web应用程序之前,你必须围绕无状态来包装你的宇宙。
ASP。NET等价于完成类似状态的行为是使用每个网页都可用的Session集合。
protected void cmdvar1_Click(object sender, EventArgs e)
{
int var1 = (int)Session["yourInteger"];
var1 += 10;
Session["yourInteger"] = var1;
lblvar1.Text = var1.ToString();
}
你显然是在其他地方设置了Session["yourInteger"]的初始值,只有一次。
Session的问题是,它使你的应用程序潜在的错误和不可扩展。你用得越多,这两方面就越差。
使用会话体,HTTP是无状态协议,一旦回发就会丢失当前变量值,
<<p> 解决方案/strong>:int var1=0;
protected void cmdvar1_Click(object sender, EventArgs e)
{
if(Session["var1"]!=null)
var1=int.Parse(Session["var1"].ToString());
else
var1=0;
var1= var1+ 10;
lblvar1.Text = var1.ToString();
Session["var1"]=var1;
}