2

所以我有代码..

int var1 = 0;

protected void cmdvar1_Click(object sender, EventArgs e)
    {
        var1= var1+ 10;
        lblvar1.Text = var1.ToString();
    }

当点击它时,它很棒..它需要int,添加10,然后显示它..但是它不会显示超过10,做了一些玩弄得出的结论,这不是因为标签没有更新,它只是简单地没有在变量的前 10 中添加 10。我究竟做错了什么?我错过了什么?我需要将变量信息存储在 cookie 中吗?

4

5 回答 5

4

这是由于 ASP.NET 的生命周期。在网页后面存储私有字段与使用 WinForms 的方式不同。如果你想跨回发持久化信息,你需要将它存储在一些持久化存储中,即Session//等ViewStateDatabase

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();
}
于 2013-06-20T21:47:52.313 回答
2

所以我强烈建议寻找一个不同的平台。也许是 ASP.NET MVC ...但是您可以使用以下内容来解决您的问题。

private int MyNum
{
   get{ return (int)ViewState["MyNum"] ?? 0; }
   set { ViewState["MyNum"] = value; }
}

然后只需使用 MyNum 作为递增的整数。

于 2013-06-20T21:50:26.860 回答
1

使用 Session body,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;
    }
于 2013-06-20T21:50:23.033 回答
1

假设 lblvar1 是一个标签控件,那么您可以执行以下操作。这将起作用的原因是因为 .NET 会自动处理 UIControl 的状态

protected void cmdvar1_Click(object sender, EventArgs e)
    {
        var var1 = Convert.ToInt32(lblvar1.Text);
        var1= var1+ 10;
        lblvar1.Text = var1.ToString();
    }
于 2013-06-20T21:50:37.990 回答
1

正如评论中所建议的那样,在您开始生产有意义的 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 的问题在于它使您的应用程序可能存在错误并且有些不可扩展。您使用它的次数越多,这两个帐户的效果就越差。

于 2013-06-20T21:54:08.927 回答