即时生成数据绑定的FormView字段

时间:2011-07-15 15:31:25

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

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

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

我能够以多种不同的方式生成UI,但我还没有找到一种方法,包括回发页面时动态字段的数据。因为在FormView受数据绑定之前我不会知道'schema',所以我想知道我是否为管理回发数据做得太晚了。

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

更新

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

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

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

1 个答案:

答案 0 :(得分:0)

如果要从动态生成字段中获取值,则应从Request.Form集合中获取该值并将其传递到FormView的ItemInserting事件中。 e.g。

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

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