4

我试图围绕控制基础结构来了解 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"标签的控件都将保持视图状态是否安全?

4

4 回答 4

6

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

于 2009-03-03T17:54:58.023 回答
3

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

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

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

于 2009-03-12T23:42:14.750 回答
2

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

于 2009-03-03T15:48:33.180 回答
1

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

至于动态添加的控件,这取决于您何时以及如何将控件添加到控件树中。查看这个问题的公认答案,也可以在这里查看我的问题

于 2009-04-06T16:41:11.720 回答