【问题标题】:ASP.NET Custom Server Control (GridView), DataBinding, and Control Lifecycle conflictASP.NET 自定义服务器控件 (GridView)、DataBinding 和控件生命周期冲突
【发布时间】:2008-11-26 01:38:28
【问题描述】:

我创建了一个自定义服务器控件(继承自 GridView)。

在页面上,GridView 是 DataBound 到一个 DataSet,所以在设计时我不知道 GridView 中会出现哪些列。

现在,我想做的是,在每个单元格中为 GridView 标题行添加一个文本框,这些文本框将控制列过滤。 (使用 GridView OnRowCreated 方法添加文本框)。

到目前为止一切顺利,文本框出现,过滤工作正常。

问题是,每次回发后,文本框的 Text 值都会丢失。从我的实验来看,这似乎是因为我在页面/控件生命周期中添加文本框太晚了。

如何处理这类问题,我需要在生命周期的早期创建和添加文本框(例如 GridView 的 OnInit),但添加文本框取决于生命周期后期获得的信息?

【问题讨论】:

    标签: c# asp.net data-binding custom-server-controls


    【解决方案1】:

    为什么不将值存储在 ViewState 中并在回发时将它们读回(重新填充文本框)?

    【讨论】:

      【解决方案2】:

      您不必担心文本框的值,只需担心它们的 ID 以及创建它们的时间;只要您创建并“提供”具有相同数量的文本框及其各自(唯一(!))ID 的页面,控制状态(...嗯...或者可能是视图状态)将负责。

      您可以同时使用 Page_Init 和 Page_Load...Page_Init 有点推荐,但这取决于您的需要。

      【讨论】:

        【解决方案3】:

        有一个有用的页面:http://msdn.microsoft.com/en-us/library/ms178472.aspx 它特别指出您需要使用 Pre_Init 事件来创建您的控件:

        PreInit :将此事件用于 以下:

        • 检查 IsPostBack 属性以确定这是否是第一个 处理页面的时间。
        • 创建或重新创建动态控件
        • 动态设置母版页。
        • 动态设置 Theme 属性。
        • 读取或设置配置文件属性值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-23
          • 1970-01-01
          • 2012-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多