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

本文关键字:ViewState 存储 属性 是否 控件 | 更新日期: 2023-09-27 18:07:15

我正在看一本关于ASP的书。我对一个概念有点困惑。

所有的时间,我认为没有值可以保存在回发,如果它不是存储在视图状态,会话状态等。然而,现在我读到关于使用面板在一个页面中有多视图内容。我有以下代码:

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中?

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

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

是-它存储在视图状态。否则控件状态会在回发时重置(它不会)。

作为一些添加的信息-这是一个"与优点和缺点"与web表单当你忘记显示/隐藏一些项目,用户导航回页面新鲜,现在的状态是不同的,而不是他们最后一次看到它。MVC通过POST/Redirect/GET模式避免了这种情况,这在技术上也可以用web表单实现。