我有一个问题,我已经咨询了其他人,但他们也不知道问题是什么。我现在有一个非常简单的asp.net页面,其中有一些表格控件。该页面包含一个可以添加对象的表单(未实现jet)。表格下面有按钮可以清除这些表格中的对象。所有对象都在一个列表中共享,并具有一个枚举,从表中分隔它们。
//字段 列出动物;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
animals = new List<Animal>();
animals.Add(new Animal("kees", false, species.dog) { Age = 13, RegNr = "0123456789" });
animals.Add(new Animal("Henk", true, species.dog));
animals.Add(new Animal("Cat", false, species.cat));
ViewState["animalsSession"] = animals;
fillTables();
}
}
private void fillTables()
{
foreach (Animal a in (List<Animal>)ViewState["animalsSession"])
{
//make a row
TableRow newRow = new TableRow();
//making cells
TableCell cellName = new TableCell();
cellName.Text = a.Name;
newRow.Cells.Add(cellName);
TableCell cellAge = new TableCell();
cellAge.Text = (a.Age == -1 ? String.Empty : a.Age.ToString());
newRow.Cells.Add(cellAge);
TableCell cellRegNr = new TableCell();
cellRegNr.Text = (a.RegNr == null ? String.Empty : a.RegNr);
newRow.Cells.Add(cellRegNr);
TableCell cellReserved = new TableCell();
cellReserved.Text = (a.IsReserved ? "x" : String.Empty);
newRow.Cells.Add(cellReserved);
if (a.Species == species.dog)
{
dogTable.Rows.Add(newRow);
}
else if (a.Species == species.cat)
{
catTable.Rows.Add(newRow);
}
}
}
protected void dogDeleteButton_Click(object sender, EventArgs e)
{
List<Animal> cats = new List<Animal>();
foreach (Animal a in (List<Animal>)ViewState["animalsSession"])
{
if (a.Species == species.cat)
{
cats.Add(a);
}
}
ViewState["animalsSession"] = cats;
fillTables();
}
现在这一切都按预期工作,但请注意aniimalSession不是会话而是视图状态。当我使用会话更改此页面上的所有视图状态时,它根本不起作用。我不知道为什么这是因为我学到了它,他们做的有点相同。当viewstate将信息保存在客户端上时,只有会话将信息保存在服务器上,但这不应该阻止会话在这种情况下不能正常工作吗?
有人知道我在这里做错了什么,或者会话和viewstate有其他差异。
BTW我知道我可以更好地使用像gridview这样的东西,但我现在正在学习会话,所以我尝试使用这些表来使用它。