Asp.net mvc 2 动态生成模型中的ASP.NET MVC 2数据注释

Asp.net mvc 2 动态生成模型中的ASP.NET MVC 2数据注释,asp.net-mvc-2,data-annotations,html-helper,Asp.net Mvc 2,Data Annotations,Html Helper,我正在创建一个asp.net mvc 2应用程序,根据用户输入动态生成视图模型。简单地说,用户可以选择他想在视图中看到的字段 由于模板化的帮助程序严重依赖于模型属性和属性(数据注释),因此我需要在运行时以某种方式将属性添加到视图模型中。不用说,这不是一项简单的任务 那么,在这种情况下,你们建议我做什么?我不能静态地添加属性,所以我应该继续并尝试动态地添加属性,即使这是一项大量的工作,还是应该尝试使用不同的方法 提前谢谢 Felipe听起来有些过分(如果我理解正确的话)——这是在动态地创建模型。你

我正在创建一个asp.net mvc 2应用程序,根据用户输入动态生成视图模型。简单地说,用户可以选择他想在视图中看到的字段

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

那么,在这种情况下,你们建议我做什么?我不能静态地添加属性,所以我应该继续并尝试动态地添加属性,即使这是一项大量的工作,还是应该尝试使用不同的方法

提前谢谢

Felipe听起来有些过分(如果我理解正确的话)——这是在动态地创建模型。你没有利用拥有模型的主要好处;编译时检查

我会尝试使用特定于任务的对象(例如一个UserForm类,它会有UserFormFields类的列表等等),而不是动态创建它们

编辑:我的建议是不要使用基于属性的验证,而是在设计模型时考虑验证。下面这样的设计可以更好地解释我的观点:

interface IUserValidation
{
    bool IsValid();
}

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

class UserFormField
{
    List<IUserValidation> _validations;

    public IEnumerable<ValidationResult> Validate()
    {
       // ...
    }
}
接口IUserValidation
{
bool是有效的();
}
类RequiredUserValidation:IUserValidation
{
公共bool是有效的()
{
// ....
}
}
类UserFormField
{
列表验证;
公共IEnumerable验证()
{
// ...
}
}

似乎您需要一个动态应用验证的自定义视图模型活页夹。

自定义模型活页夹只能在绑定部分帮助您。它对ASP.NET MVC的模板化帮助程序或其他功能没有帮助

我建议编写一个自定义元数据提供程序,方法是使用从global.asax继承并在其中注册您的提供程序。自定义元数据提供程序可以从任意位置获取其元数据:CLR属性、XML文件、数据库或随机数生成器。当然,内置数据注释提供程序使用CLR属性


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

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