会话不起作用,而viewstate是ASP.NET

时间:2014-12-20 10:49:25

标签: c# asp.net session viewstate

我有一个问题,我已经咨询了其他人,但他们也不知道问题是什么。我现在有一个非常简单的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这样的东西,但我现在正在学习会话,所以我尝试使用这些表来使用它。

1 个答案:

答案 0 :(得分:1)

您能否确定会话是否已启用。请参阅以下链接,检查ASP Alliance是否启用了会话状态。