没有数据注释的MVC3不显眼验证

时间:2012-03-29 16:54:08

标签: asp.net-mvc-3 validation annotations client unobtrusive

我需要在动态内容中创建MVC3中的html。我的方案是我需要创建一个视图,可以根据用户和环境更改它显示的html字段。在我们准备检索它们以供使用并且可以更改之前,可能的字段范围是未知的。这个基本功能在MVC中相当容易。但是,我想使用不引人注目的客户端验证,这是我出现问题的地方。

这是场景:我在模型中有一个复杂类型列表。复杂类型实例存储有关需要创建的html字段的元数据。例如,复杂类型具有DataType字符串属性,该属性告诉我们要创建的html元素类型。 “文本”用于文本框的输入元素,“复选框”用于复选框的输入元素,“选择”用于选择元素,依此类推。复杂类型具有Readonly,IsRequired,Value,Regex,MinLength,MaxLength等属性......它包含了创建一系列HTML元素并对这些元素进行验证所需的一切。

因此,复杂类型列表将插入到控制器中的模型中,然后调用我们的视图。视图需要显示适当的html元素,并考虑列表中每个复杂类型的复杂类型中的设置。这可以通过创建新的帮助程序来管理复杂类型或在视图中的循环中使用switch语句来实现,该循环检查复杂类型的DataType并使用适当的帮助程序。到目前为止一切都很好。

然而,问题出现在我们想要使用客户端验证而不必创建自己的JavaScript客户端不引人注意的属性,这是我想要实现的。有没有办法可以使用现有的MVC代码创建不显眼的客户端验证而不使用数据注释?

E.g。覆盖现有的ModelMetadataProvider DataAnnotationsModelMetadataProvider并从我自己的帮助程序中调用一个新方法。

实现上述方案的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

你究竟是如何创建“动态MVC3 html”的?你的意思是你只是在不使用实际视图的情况下创建HTML吗?由于验证是在模型绑定器(而不是在html)中的服务器端处理的,因此动态html没有区别。在客户端,您只需添加data- *属性即可使其正常工作。

由于您没有提供任何您的html外观的上下文,我们无法开始告诉您如何完成您想要的内容。

相关问题