ASP.Net C#变量未存储在网页上
所以我有密码ASP.Net C#变量未存储在网页上,c#,asp.net,visual-studio-2010,variables,cookies,C#,Asp.net,Visual Studio 2010,Variables,Cookies,所以我有密码 int var1 = 0; protected void cmdvar1_Click(object sender, EventArgs e) { var1= var1+ 10; lblvar1.Text = var1.ToString(); } 当点击这个,它是伟大的。。它取整数,加上10,然后显示。。然而,它不会显示超过10个,做了一些尝试,得出结论,这不是因为标签没有更新,它只是没有将10添加到变量的前10。我做错了什么?我错
int var1 = 0;
protected void cmdvar1_Click(object sender, EventArgs e)
{
var1= var1+ 10;
lblvar1.Text = var1.ToString();
}
当点击这个,它是伟大的。。它取整数,加上10,然后显示。。然而,它不会显示超过10个,做了一些尝试,得出结论,这不是因为标签没有更新,它只是没有将10添加到变量的前10。我做错了什么?我错了什么?我是否需要将变量信息存储在cookie或其他东西中?这是由于ASP.NET的生命周期造成的。在网页后面存储私有字段与WinForms的工作方式不同。如果要跨回发持久化信息,则需要将其存储在一些持久化存储中,即
会话
/视图状态
/数据库
等
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();
}
使用会话体,HTTP是无状态协议,回发后会丢失当前变量值 解决方案:
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;
}
因此,我强烈建议寻找一个不同的平台。也许ASP.NETMVC。。。但是,您可以使用以下方法来解决您的问题
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相当于完成类似状态的行为,即使用可用于每个网页的会话集合
protected void cmdvar1_Click(object sender, EventArgs e)
{
int var1 = (int)Session["yourInteger"];
var1 += 10;
Session["yourInteger"] = var1;
lblvar1.Text = var1.ToString();
}
很明显,您正在为会话[“yourInteger”]在其他地方设置初始值,只设置了一次
会话的问题在于,它使您的应用程序可能有缺陷,并且有些不可扩展。您使用它的次数越多,这两个帐户的情况就越糟。您的帐户正在陷入无状态!一旦网页被呈现并交付给客户端,它就结束了。您必须跟踪变量的状态。这意味着使用隐藏的表单字段、查询字符串、cookie等。如果您使用WebForms,ViewState可以在文本框等中保存值。与WinForm相比,这真的是一个完全不同的世界。您需要使用类似于
Session
或ViewState
的东西,或者可能使用数据库来在回发之间保留值。根据数据是什么、如何使用以及它需要“生存”多长时间,将帮助您确定哪种方法是合适的。使用会话:IMHO,这应该是一个注释,除非您准备提供一个使用Session
或ViewState
跟踪变量的示例…@James,在IsPostback
检查之后,检查session变量是否不是null将是一件好事,我认为如果“MyNum”,这将抛出一个异常wasnull
,因为您无法将null
强制转换为int
。我不建议采用这种方式,因为缓存页返回过期数据可能会出现问题。+1用于解释HTTP是无状态协议。很多人并不真正理解协议是如何工作的。若他们这样做了,那个可以帮助他们更好地理解很多事情,比如POST/GET发生时会发生什么,等等。