【问题标题】:Generate data-bound FormView fields on-the-fly即时生成数据绑定的 FormView 字段
【发布时间】:2011-07-15 15:31:24
【问题描述】:

我有一个现有的 ASP.NET 3.5 应用程序,它带有一个包含用于对域对象执行 CRUD 操作的 FormView 控件的 Web 表单。一个新的需求是向需要在 FormView 中反映的域对象添加一些动态内容。这意味着我需要根据绑定的对象即时生成这些控件。

我正在为 FormView 使用 ObjectDataSource,它返回域对象进行绑定。域对象现在将具有一个属性,该属性返回一个 Section 对象的集合,每个 Section 包含一个问题列表。在我的表单中间,我需要显示每个部分,其中包含问题列表和一个允许用户输入答案的文本框。

我能够以多种不同的方式生成 UI,但我还没有找到一种在回发页面时包含动态字段数据的方法。因为在 FormView 绑定数据之前我不会知道“模式”,所以我想知道我在管道中是否为时已晚,无法正确处理回发数据。

生成这些字段以便正确回发数据的最佳方式是什么?

更新

我仍在寻找完成这项任务的最佳方法,但我找到了一个至少可行的解决方案。简而言之,我在 FormView 的 DataBound 事件处理程序中创建动态内容,因为这是管道中我始终可以获取对 FormView 控件的引用的第一个位置。然后我按照 Muhammed 的建议从 Request.Form 集合中提取值,并将它们放入 FormView 的 ItemInserting 和 ItemUpdating 处理程序中的 EventArgs 对象中。

这不是那么简单,因为每个控件都必须有一个唯一的 ID,然后我可以使用它来定位值 - 这还不错。但是,我必须在数据源中实现自定义逻辑,然后将这些值映射到数据绑定对象中。

总而言之,还不错,但肯定不是我想在其他解决方案中复制的东西,所以我希望还有更好的方法。

【问题讨论】:

    标签: c# .net asp.net data-binding formview


    【解决方案1】:

    当你想从动态生成的字段中获取值时,你应该从Request.Form集合中获取它,并将它传递给FormView的ItemInserting事件。例如

     protected void frmAsset_ItemInserting(object sender, FormViewInsertEventArgs e)
     {
       e.Values["FieldName"] =    Request.Form[ControlClientID];
     }
    

    请注意,您的控件应在回发时重新创建以获取值。

    【讨论】:

    • 是的,问题在于何时重新创建控件。在 Load 事件之前,我似乎无法获得对 FormView 中控件的引用,到那时回发数据已经恢复到控件树中。由于生成的控件不在控件树中,因此值会丢失。
    • 这就是为什么我建议您从 Request.Form Collection 中获得价值。
    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 2016-12-04
    • 2023-03-03
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多