【问题标题】:Are control attributes stored in ViewState too?控件属性是否也存储在 ViewState 中?
【发布时间】:2011-08-30 15:07:02
【问题描述】:

我目前正在阅读一本关于 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 中?

【问题讨论】:

    标签: c# asp.net viewstate


    【解决方案1】:

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

    【讨论】:

    • 你是对的。我做了一个小测试并完全禁用了页面的视图状态,它开始错误地呈现它。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      相关资源
      最近更新 更多