我在页面内部有一个类级别价格变量,如下所示:
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的一个已知问题,是否有解决方法?
答案 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就是其中之一)但您需要自己采取步骤以确保每次都填充字段(在代码中声明)。在这种特殊情况下,可以通过获取它们或将其保存在表单(视图状态)或会话数据中。选择哪一个应取决于数据大小,重新获取时间,数据存储负载等。