我正在学习MVC并且似乎无法弄清楚如何处理以下场景,我有一个带有送货地址和账单地址的表格。各个领域都需要。还有一个" Billing Adress的复选框与送货地址相同"。我的问题是模型状态永远不会有效,除非两个地址都完成。我可以很容易地使用一些javascript来处理这个问题,这些javascript只是将发货地址中的值添加到帐单地址字段中,但是如果有更好的方法来处理这个问题,我想知道。关于如何处理这种情况的任何指导都很棒。谢谢!
答案 0 :(得分:4)
您可以通过创建自定义验证属性来完成此操作:
http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx
它的要点是你创建一个新类based off ValidationAttribute
和IClientValidatable
,根据需要覆盖和实现,添加你的客户端验证(无论如何你需要),并应用属性到您的可选字段。
或者由于验证可能非常复杂,因此请将其应用于共享的部分可选,部分必需的字段。
那个人还有一个他正在写的库的alpha,以使MVC验证更灵活。我自己没有使用它,但是you could give it a try。
答案 1 :(得分:4)
有很多方法可以解决这个问题。如果您没有使用客户端验证,那么您可以在模型上简单地实现IValidatableObject,并覆盖IsValid()方法并执行一些代码来检查模型的有效性。
如果您使用的是客户端验证,那么您需要自定义属性,或使用类似fluent validation的内容。