0

对于实现以下场景的技术/策略,我将不胜感激:
1. SQL 数据库有一个包含一些字段的客户表。2. 允许用户添加额外的自定义字段并指定数据类型和一些规则,例如需要值等。 3. 当用户加载用户界面时,这些自定义字段需要显示为任何其他标准字段,并在场地。4.用户保存更改时,需要将这些自定义字段中的值保存到数据库中

技术
我们仍处于设计阶段 - 因此对所有建议持开放态度。但技能集主要在 SQL、ASP.Net 网络表单中

问题
1. 实现上述第 2 项的最佳方法是什么 - 一个存储 TableName、FieldName、DataType、Rules 等的单独表?对于任何反馈,我们都表示感谢。
2. 实现上述第 3 项和第 4 项的最佳方法是什么 - 我一直在阅读动态数据、数据注释等。看起来很有希望,但我不确定这些可以在多大程度上用于解决我们的问题.

再次感谢任何帮助我们提出好的设计的帮助。

4

1 回答 1

0

在我最近的应用程序中,我这样做了:

  1. 使用此模式调用的数据库表CustomFields(CustomFieldId int PK, DisplayName nvarchar(50), Class int, Type int)
  2. 每个可扩展实体都有一个名为CustomFieldValueswhich is的新列nvarchar(MAX)。每个实体都有一个进入ClassCustomFields 的数字。自定义字段值
  3. 然后是一些 ASP.NET MVC 视图黑客来显示自定义字段。

基本上,该表CustomFields定义了每个字段(其名称、数据类型和与之关联的实体类),每个实体的CustomFieldValues属性列出了实际数据,它被序列化为仅包含简单值的 CSV 字符串:字符串、整数,小数等,没有复杂类型或图形。

我将 ASP.NET MVC 用于前端的东西,因为 WebForms 实际上更难使用,尤其是动态添加的字段。我确实必须对绑定进行一些更改以确保我的模型被拾取,但一切都很好。

如果您使用的是 MVC,则需要一个如下所示的自定义 ViewModel 类:

public class CustomFormViewModel {

    public List<CustomFieldViewModel> CustomFields { get; set; }

}

public class CustomFieldViewModel {

    public Int32 CustomFieldId { get; set; } // the field ID for definition lookup
    public String Value { get; set; }
}

然后在视图中:

<% for(int i=0;i<Model.CustomFields.Count;i++) { %>
    <%= Html.TextBoxFor( m => m[i].Value ) %>
<% } %>

在你的行动中,一切都应该为你神奇地绑定:

[HttpPost]
public ActionResult CustomForm(CustomFormViewModel model) {
    model.CutomFields[0].Value == "foo";
}

简单!

请注意,ASP.NET MVC 在绑定 this 时确实存在一些错误,找到它们很有趣!

于 2013-03-18T22:50:00.210 回答