ASP.NET网页回发

时间:2010-08-20 11:56:18

标签: c# asp.net postback

我在页面内部有一个类级别价格变量,如下所示:

public partial class _Default : System.Web.UI.Page 
{
    private MyClass myVar = new MyClass();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            myVar.LoadData();
            myVar.ShowData();
        }
    }

    protected void cmdRefresh_Click(object sender, EventArgs e)
    {
        myVar.ShowData();
    }
}

我遇到的问题是,在初始加载后,第一次按下按钮时,它似乎重置了myVar,并且其所有数据都丢失了。这是ASP.NET的一个已知问题,是否有解决方法?

3 个答案:

答案 0 :(得分:4)

如果您只需要保存当前页面的类,请使用ViewState来存储该类。如果您想将其保存到整个网站,请查看Sessions

等内容
private MyClass myClass
{
    get {
      if (this.ViewState["myVar"] != null)
      {
           return (MyClass)this.ViewState["myVar"];
      }
    }
set{
     this.ViewState["myVar"] = value;
}
}

答案 1 :(得分:2)

变量myVar永远不会在回发中持久存在,您需要使用一些缓存方法,例如Application / Session / ViewState / Cookies。

答案 2 :(得分:0)

是的,这是一项了解功能。基本上,您为每个请求创建了页面对象,因此为您设置了属性(IsPostBack就是其中之一)但您需要自己采取步骤以确保每次都填充字段(在代码中声明)。在这种特殊情况下,可以通过获取它们或将其保存在表单(视图状态)或会话数据中。选择哪一个应取决于数据大小,重新获取时间,数据存储负载等。