繁体   English   中英

控件属性也存储在ViewState中吗?

[英]Are control attributes stored in ViewState too?

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

一直以来,我一直认为如果值既不存储在视图状态,会话状态等中,也无法通过回发进行保存。 但是,现在我读到有关使用面板在一个页面中具有多视图内容的信息。 我有以下代码:

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中的信息将加载到控件中。

是的-它必须被存储在视图状态。 否则,控制状态将在回发时重置(不是)。

作为一些补充信息-当您忘记显示/隐藏某些项目并且用户重新导航回到页面并且状态与上次看到的状态不同时,这是Web表单的“优缺点”之一MVC通过POST / Redirect / GET模式帮助避免了这种情况,从技术上讲,它也可以使用Web表单来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM