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 c#变量不存储在网页上

这是由于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;
    }