8

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

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

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

提前致谢!

费利佩

4

3 回答 3

3

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

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

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

于 2010-02-13T02:39:10.407 回答
0

听起来像是矫枉过正(如果我理解正确的话) - 那就是动态创建模型。您没有使用拥有模型的主要好处;编译时检查。

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

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

interface IUserValidation
{
    bool IsValid();
}

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

class UserFormField
{
    List<IUserValidation> _validations;

    public IEnumerable<ValidationResult> Validate()
    {
       // ...
    }
}
于 2010-02-13T02:19:59.597 回答
0

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

于 2010-02-13T02:32:51.713 回答