2012-03-29 69 views
0

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

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

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

但是,问题出现在我们想要使用客户端验证而无需创建JavaScript客户端不引人注意的属性这就是我想实现的。有没有一种方法可以使用现有的MVC代码创建不引人注意的客户端验证而不使用数据注释?

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

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

+0

我同意@MystereMan。另外,要注意你的问题似乎有点不完整,或者说不完全正确。 MVC已经建立了不显眼的“客户端”验证。我最近做了类似的事情。我创建了一个ModelMetadataProvider和新的html模板,以将不显眼的数据划破html属性到我的HTML中用于“动态”模型,是的,这是正确的动态模型,但我仍然需要编写自己的JavaScript代码来处理这些属性。 – 2012-04-11 22:22:32

+0

在问题结尾处,我陈述“是否有一种方法可以使用现有的MVC代码创建不引人注意的客户端验证,而不使用数据注释”。也就是说,我可以在没有数据注释的情况下实现不显眼的偏差,也不需要自己编写javascript代码。看起来我们都想出了实现一个新的ModelMetadataProvider的相同的解决方案,或者在我的情况下,我从AssociatedMetadataProvider继承。 这将是很好,如果我们不必复制已经到位的车轮,只是因为螺栓没有准确对齐! – 2012-04-13 12:54:51

+0

你不能。这是它的工作方式,不幸的是在你的情况下,工作必须完成。 – 2012-04-13 17:26:31

回答

0

你到底该如何创建“动态MVC3 html”?你的意思是你只是在不使用实际视图的情况下创建html?由于验证在模型联编程序(不在html中)中由服务器端处理,所以动态html没有什么区别。客户端,你只需添加data- *属性,使其工作。

由于您没有提供任何关于您的html的上下文,我们不能开始告诉您如何完成您想要的。