【问题标题】:Implementing dynamic user interfaces ASP.Net实现动态用户界面 ASP.Net
【发布时间】:2013-03-19 06:50:00
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net dynamic user-interface


    【解决方案1】:

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

    1. 名为CustomFields 的数据库表具有以下架构:(CustomFieldId int PK, DisplayName nvarchar(50), Class int, Type int)
    2. 每个可扩展实体都有一个名为CustomFieldValues 的新列,即nvarchar(MAX)。每个实体在 CustomFields 的 Class 中都有一个编号。 CustomFieldValues
    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 时确实存在一些错误,祝您找到它们的乐趣!

    【讨论】:

    • 非常感谢您的快速回复。在我们开始设计时,我会牢记这一点!