控制属性是否也存储在ViewState中?

时间:2011-08-30 15:07:02

标签: c# asp.net viewstate

我目前正在阅读一本关于ASP.NET的书,我对一个概念感到有些困惑。

如果没有存储在viewstate,session state等中,我认为没有值可以保存在回发上。但是,现在我读到了使用Panel在一个页面中拥有多视图内容。 我有以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        Panel1.Visible = true;
        Panel2.Visible = false;
        Panel3.Visible = false;
    }
}

protected void GoNext_Click(object sender, EventArgs e)
{
    if (Panel1.Visible)
    {
        Panel1.Visible = false;
        Panel2.Visible = true;
    }
    else if (Panel2.Visible)
    {
        Panel2.Visible = false;
        Panel3.Visible = true;
    }
    else if (Panel3.Visible)
    {
        Panel3.Visible = false;
        Panel1.Visible = true;
    }
}

关于该代码的部分令人困惑的是,例如,当我看到Panel3可见时,ASP.NET如何知道也隐藏了Panel1? (因为在之前的else if语句中,我只告诉ASP.NET隐藏Panel2并显示Panel3,但我对Panel1没有任何说明。)

这些值是否存储在ViewState中?

2 个答案:

答案 0 :(得分:3)

我相信信息仍然存储在每个回发的ViewState中,即使控件没有呈现给页面。再次呈现控件时,ViewState中的信息将加载到控件中。

答案 1 :(得分:1)

是 - 已将存储在视图状态中。否则控制状态将在回发时重置(它没有)。

作为一些补充信息 - 当您忘记显示/隐藏某些项目并且用户新导航回到页面并且状态现在与最后一个不同时,这是与Web表单的“利弊得分”之一他们看到它的时间.MVC通过POST / Redirect / GET模式帮助避免这种情况,技术上也可以通过Web表单完成。