我正在创建一个asp.net mvc 2应用程序,根据用户输入动态生成我的视图模型。简而言之,用户可以在他的视图中选择他想要查看的字段。
由于模板化助手很大程度上依赖于模型属性和属性(数据注释),因此我需要以某种方式在运行时将属性添加到视图模型中。不必说这不是一项简单的任务。
那么,你们在这种情况下建议我做什么?我无法静态添加属性,所以我应该继续尝试动态添加它们,即使它是很多工作还是我应该尝试使用不同的方法?
提前致谢!
菲利普
答案 0 :(得分: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项目中可能还有一个实现,但我不确定。
答案 1 :(得分:0)
听起来有点矫枉过正(如果我理解的话) - 这就是在飞行中创建模型。你没有使用模型的主要好处;编制时间检查。
我尝试使用特定于该任务的对象(例如,具有List of UserFormFields类的UserForm类等等),而不是动态创建它们。
修改:我建议不使用基于属性的验证并在设计模型时考虑验证。如下设计可以更好地解释我的观点:
interface IUserValidation
{
bool IsValid();
}
class RequiredUserValidation : IUserValidation
{
public bool IsValid()
{
// ....
}
}
class UserFormField
{
List<IUserValidation> _validations;
public IEnumerable<ValidationResult> Validate()
{
// ...
}
}
答案 2 :(得分:0)
似乎您需要一个动态应用验证的自定义视图模型绑定器。