如何在MVC3中处理条件验证?

时间:2011-11-06 22:06:40

标签: c# asp.net-mvc-3

我正在学习MVC并且似乎无法弄清楚如何处理以下场景,我有一个带有送货地址和账单地址的表格。各个领域都需要。还有一个" Billing Adress的复选框与送货地址相同"。我的问题是模型状态永远不会有效,除非两个地址都完成。我可以很容易地使用一些javascript来处理这个问题,这些javascript只是将发货地址中的值添加到帐单地址字段中,但是如果有更好的方法来处理这个问题,我想知道。关于如何处理这种情况的任何指导都很棒。谢谢!

2 个答案:

答案 0 :(得分:4)

您可以通过创建自定义验证属性来完成此操作:

http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

它的要点是你创建一个新类based off ValidationAttributeIClientValidatable,根据需要覆盖和实现,添加你的客户端验证(无论如何你需要),并应用属性到您的可选字段。

或者由于验证可能非常复杂,因此请将其应用于共享的部分可选,部分必需的字段。

那个人还有一个他正在写的库的alpha,以使MVC验证更灵活。我自己没有使用它,但是you could give it a try

答案 1 :(得分:4)

有很多方法可以解决这个问题。如果您没有使用客户端验证,那么您可以在模型上简单地实现IValidatableObject,并覆盖IsValid()方法并执行一些代码来检查模型的有效性。

如果您使用的是客户端验证,那么您需要自定义属性,或使用类似fluent validation的内容。