我有一个对象,我在
后面的页面代码上初始化以下是此对象类
的示例public Class Thing
{
List<OtherThing> _thisList;
public List<OtherThing> ThisList
{
get { return _thisList; }
set { _thisList= value; }
}
public Thing()
{
this._thisList=new List<OtherThing>();
}
}
这是我的页面代码
public partial class form : System.Web.UI.Page
{
private Thing theThing = new Thing();
protected void btnAdd_Click(object sender, EventArgs e)
{
OtherThing OT = new OtherThing(txtName.Text, Convert.toInt32(txtId.Text);
TheThing.ThisList.Add(OT);
this.gridview.DataSource=null;
this.gridview.DataSource=TheThing.ThisList();
this.gridview.DataBind();
}
}
然而每次我添加一个元素时,gridview只会显示最新添加的元素,我尝试调试并发现当我第二次按下按钮时“TheThing”的列表显示为0
答案 0 :(得分:1)
因为每次单击按钮,它都会执行此行
private Thing theThing = new Thing();
正在初始化Thing
的新对象,并且在其构造函数中,您正在将ThisList
属性初始化为空列表。
在该行中放置一个断点,你可以看到它
如果要在多个调用之间保留数据,则应将其保留在某处并从那里读取。您可以将其存储在会话状态,应用程序状态,内存缓存,磁盘中的文件或数据库中。
请记住, Http(并且应该是)无状态。理想情况下,每次调用您的页面都不知道之前的调用是做什么的。有趣的是,与这个原则相矛盾的是,Webforms使用一种名为ViewState的东西来保存调用之间的ui控件(下拉控件等)数据(回复点击按钮)。这更像是一种将有状态性(如Windows窗体应用程序)引入Web表单的黑客行为!
顺便说一下,你的班级可以简单地使用自动属性,因为它没有对set
和get
操作做任何事情
public class Thing
{
public List<OtherThing> ThisList { get; set; }
public Thing()
{
this.ThisList = new List<OtherThing>();
}
}
答案 1 :(得分:0)
这是因为:
您每次按钮添加时都声明python 3.6+
this.gridview.DataSource=null;
。
尝试将此内容放入clicked
事件:
Form load
并在您的this.gridview.DataSource=null;
活动中:
button Click