【问题标题】:Grid View - Do I Need ViewState for Nested Controls网格视图 - 嵌套控件是否需要 ViewState
【发布时间】:2011-03-15 21:37:06
【问题描述】:

我有一个带有嵌套文本框的网格视图。我想关闭视图状态,但事实是当发布数据时,gridview 内的文本框不可用(回发时 gridview 中没有行)。

我使用的是 ASP.NET 2.0,所以这会进入控制状态,而不是视图状态吗?

gridview 的示例 ASPX 代码:

<asp:GridView runat="server" ID="myGridView">               
    <Columns>                        
        <asp:TemplateField ItemStyle-Wrap="false" HeaderText="Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="myTextBox" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

编辑

控件的信息不存储在视图状态中(例如选定的值和 .text 等):

在 ASP.NET 2.0 版中引入的控件状态类似于视图状态,但在功能上独立于视图状态。页面开发人员可以禁用页面的视图状态或单独的性能控制。但是,不能禁用控制状态。控件状态旨在存储控件的基本数据(例如分页控件的页码),这些数据必须在回发时可用,以使控件即使在视图状态已被禁用时也能正常工作。

来源:http://msdn.microsoft.com/en-us/library/1whwt1k7.aspx

【问题讨论】:

标签: asp.net vb.net gridview viewstate


【解决方案1】:

控件不管理自己的从 PostBack 到 PostBack 的状态。这就是 ViewState 的用途。 Gridview 中的控件是从存储在视图状态中的数据绑定的,除非您在每个 PostBack 上绑定控件(不建议)。

【讨论】:

    【解决方案2】:

    这个article explains how to use ControlState。也许您需要重写SaveControlState 方法以将TemplateField 数据保存在ControlState 中。

    this article中搜索“使用控制状态的缺点是:”:

    "需要一些编程。虽然 ASP.NET 页面框架为控件状态提供了基础,但控件状态是一种自定义的状态持久机制。要充分利用控件状态,您必须编写代码来保存和加载控件状态。 "

    也可能有帮助:

    Control State vs. View State Example

    ASP.NET State Management Overview

    【讨论】:

    • 所以文本框的值不是存储在控件状态中吗?不管 GridView 的视图状态是什么,我不应该能够访问它们吗?
    • ControlStateViewState 是分开的(尽管ControlState 存储在丑陋的ViewState 对象中——所以当你设置EnableViewState=false 时你仍然会看到ViewState)。我相信 Joel 是对的,您必须专门对 ControlState 进行编程以保存 TemplateField 数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多