【问题标题】:Which controls have ViewState maintained?ViewState 维护了哪些控件?
【发布时间】:2009-03-03 15:41:57
【问题描述】:

我正试图围绕控制基础结构来了解 ASP.NET 维护哪些视图状态。

有这些常规的 HTML 控件,例如: <input type="radio" checked="checked"/> -> 我知道这些没有视图状态

然后是带有 runat="server" 的 HTML 控件 <input type="radio" checked="checked" runat="server"/> -> 是否在回发之间维护视图状态?

然后是 ASP.NET 控件 <asp:TextBox id="txtMyText" runat="server"/> -> 我知道这些确实有视图状态

我们有一些继承 HtmlTextBox 的自定义控件 <myPrefix:myTextBox id="txtMyText" runat="server"/> -> 和上面的类型2一样吗?

是否可以假设任何带有runat="server" 标签的控件都将保持视图状态?

【问题讨论】:

    标签: c# .net asp.net viewstate


    【解决方案1】:

    有 3 种类型的控件,标准的 HTML 元素,如添加了 runat=server 标签的 HTML 服务器控件,以及完整的 Web 控件。只有 Web 控件维护了视图状态。

    【讨论】:

      【解决方案2】:

      当我们遇到 viewstate 问题时,我开始使用 Binary Fortress http://www.binaryfortress.com/aspnet-viewstate-helper/ 的 Viewstate 帮助软件

      它让您真正了解正在发生的事情 - 以及帮助解决与视图状态相关的性能问题,您可以一键解码视图状态并查看其中的实际内容 - 这样您就可以了解哪些控件正在使用视图状态和哪些不是,以及它们存储在那里的确切内容。

      此外,没有其他人提到过的是 ControlState。这与 ASP.NET 2 一起出现,理论是控件运行所必需的重要内容处于控件状态,数据等处于视图状态,因此您可以关闭在每次回发时视图状态并将数据绑定到您的控件,并且该控件基本上仍然使用 controlstate 工作。我说“理论”是因为在实践中实施似乎不完整。例如,当您使用反射器查看下拉列表代码时,这没有正确实现。这可能会随着框架的后续版本而改变,我不确定。如果您搜索它,那里有很多关于 controlstate 的信息,我只是想我会提到它。

      【讨论】:

        【解决方案3】:

        afaik 不,HTML 控件并非旨在维护视图状态中的任何内容,如果您关心它,请使用 webcontrols。

        【讨论】:

          【解决方案4】:

          您放置在页面视图上并添加 runat="server" 的任何内容都将保持视图状态。

          对于动态添加的控件,这取决于您何时以及如何将控件添加到控件树中。查看this question 接受的答案,同时查看my question here

          【讨论】:

          • 这是不正确的。正如@MikeW 所提到的,只有 Web 控件维护了视图状态。 即使它有 runat=server 也不会保持视图状态
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-06
          • 1970-01-01
          • 1970-01-01
          • 2013-07-05
          相关资源
          最近更新 更多