2010-02-13 95 views
8

我正在创建一个asp.net mvc 2应用程序,根据用户输入动态生成我的视图模型。简而言之,用户可以选择他想要在他的视图中看到的字段。ASP.NET MVC 2动态生成模型中的数据注释

由于模板化的帮助程序严重依赖于模型属性和属性(数据注释),所以我需要以某种方式在运行时将这些属性添加到视图模型中。不需要说这不是一个简单的任务。

那么,你们在这种情况下推荐我做什么?我无法静态添加属性,所以我应该继续尝试将它们动态添加,即使它有很多工作,或者我应该尝试使用不同的方法吗?

在此先感谢!

费利佩

回答

3

自定义模型联编程序只会帮助您在绑定部分。这对ASP.NET MVC的模板帮助器或其他功能没有帮助。

我建议由ModelMetadataProvider继承和利用ModelMetadataProviders注册您的供应商在Global.asax中编写自定义提供商,而不是。定制的元数据提供者可以从任何它想要的地方获得元数据:CLR属性,XML文件,数据库或随机数生成器。内置的Data Annotations提供程序当然使用CLR属性。

您可能需要查看内置Data Annotations元数据提供程序的源代码,以查看如何实现提供程序的示例。您可以从the CodePlex site下载ASP.NET MVC 2 RC 2源代码。 MVC Futures项目中也可能有一个实现,但我不确定。

+0

非常感谢! – 2010-02-13 16:35:06

0

听起来有点小题大做(如果我理解正确的话) - 这是动态创建模型。你没有使用模型的主要好处;编译时间检查。

我会尝试使用特定于该任务的对象(例如UserForm类,其中包含UserFormFields类的列表等),而不是实时创建它们。

编辑:我的建议是使用基于属性的验证并牢记验证设计模型。象下面这样的设计或许可以解释我的观点更好:

interface IUserValidation 
{ 
    bool IsValid(); 
} 

class RequiredUserValidation : IUserValidation 
{ 
    public bool IsValid() 
    { 
     // .... 
    } 
} 

class UserFormField 
{ 
    List<IUserValidation> _validations; 

    public IEnumerable<ValidationResult> Validate() 
    { 
     // ... 
    } 
} 
+0

这几乎是我的模型的样子。包含数据的字段集合。问题是我在编译时没有关于这些字段的任何信息。我需要查询数据库并从字段中获取信息,并填充它们的属性 – 2010-02-13 02:22:54

0

好像你需要的是动态应用验证的自定义视图模型粘合剂。