【发布时间】:2012-04-13 08:47:47
【问题描述】:
我需要在 MVC3 中从动态内容创建 html。我的场景是我需要创建一个视图,该视图可以根据用户和环境更改它显示的 html 字段。在我们准备好检索它们以供使用并且可以更改之前,不知道可能的字段范围。这个基本功能在 MVC 中相当简单。但是,我想使用不显眼的客户端验证,这是我的问题出现的地方。
这是场景:我在模型中有一个复杂类型的列表。复杂类型实例存储有关需要创建的 html 字段的元数据。例如,复杂类型有一个 DataType 字符串属性,它告诉我们要创建的 html 元素类型。 “文本”用于文本框的输入元素,“复选框”用于复选框的输入元素,“选择”用于选择元素等。复杂类型具有 Readonly、IsRequired、Value、Regex、MinLength、MaxLength 等属性...它包含我们创建一系列 HTML 元素并验证这些元素所需的一切。
所以复杂类型的列表被插入到控制器中的模型中,然后我们调用我们的视图。考虑到列表中每个复杂类型的复杂类型设置,视图需要显示适当的 html 元素。这可以通过创建一个新的帮助器来管理复杂类型或在视图中的循环中使用一个 switch 语句来检查复杂类型的 DataType 并使用适当的帮助器来实现。到目前为止一切顺利。
然而,问题出现在我们想要使用客户端验证而不必自己创建 JavaScript 客户端不显眼的属性的地方,这是我想要实现的。有没有一种方法可以在不使用数据注释的情况下使用现有的 MVC 代码创建不显眼的客户端验证?
例如覆盖现有的 ModelMetadataProvider DataAnnotationsModelMetadataProvider 并从我自己的助手中调用一个新方法。
实现上述场景的最佳方法是什么?
【问题讨论】:
-
我同意@MystereMan。另外,要注意您的问题似乎有点不完整,或者说不是重点。 MVC 已经内置了不显眼的“客户端”验证。我最近做了类似的事情。我创建了一个 ModelMetadataProvider 和新的 html 模板,以便在我的 html 中为“动态”模型放置不显眼的数据破折号 html 属性,是的,这是正确的动态模型,但我仍然需要编写自己的 javascript 代码来处理这些属性。
-
在问题的最后,我声明“有没有一种方法可以使用现有的 MVC 代码来创建不显眼的客户端验证,而无需使用数据注释”。也就是说,我可以在没有数据注释且不自己编写 javascript 代码的情况下实现不显眼的验证。似乎我们都提出了相同的解决方案,即实现一个新的 ModelMetadataProvider,或者在我的情况下,我从 AssociatedMetadataProvider 继承。如果我们不必仅仅因为螺栓没有完全对齐而复制已经到位的轮子,那就太好了!
-
你不能。这就是它的工作方式,不幸的是,在你的情况下,工作必须完成。
标签: asp.net-mvc-3 validation annotations client unobtrusive