2012-02-15 99 views
0

我有一个MVC3应用程序,使用EF,其中一张桌子在很多视图模型中。它有一个通常不需要的字段。但是,有一种情况(和一种观点)需要它。我希望客户端和服务器验证这个字段的必要性,在需要的地方。添加临时不显眼的验证

现在,我不想将Required数据注释放在字段上,因为那样它将始终是必需的。即使在未显示编辑字段的视图中,情况也是如此,这将导致用户无法离开的验证消息。

我也不是在寻找RequiredIf验证属性,因为这不符合设计。该字段只在一种情况下需要,我不想在所有视图模型中从一个多余的表中粘贴额外的字段,只是为了依赖。

我想要的就是能够在一个视图中打开一个字段所需的字段验证,以特别的,不基于DataAnnotations的方式。

立即向我建议的方式是在为字段创建标记时(通过HtmlHelper.TextBoxFor签名末尾的HtmlAttributes对象)指定必需的data-val-*属性。如果我理解正确,这应该提示JS不引人注意的验证来根据需要处理该字段。

但是这是......有点太过分了,在我看来。不显眼的验证支持会侵入到更高级别的代码中。有没有更优雅的方式来做到这一点?我可以使用jQuery Validation函数调用来实现我想要发生的事情吗?

回答

0

data-val方法不仅具有代码异味,而且也是不可靠的,因为最终用户可能使用的客户端不会执行不显眼的验证。客户端验证是糖果,这很好。您必须始终具有服务器端验证。

这是您在为视图模型使用数据模型时遇到的问题。正确的方法是为每个视图创建独立的视图模型。您可以通过共享“查看模型”并仅为那些不同的视图创建单独的视图模型。在任何一种情况下,如果您有独特的视图,它需要自己独特的视图模型。

+0

同意重新编码的味道,需要进行服务器端验证。思考我的应用程序对其余的影响。不过,非常感谢。 – 2012-02-15 17:58:02

相关问题