作为学习.NET的练习,我将一些简单的表单转移到MVC中,并遇到了一个问题。有问题的表格是一个包含选项部分的多部分表格。例如,第0部分是静态的,包含用户名,真实姓名,电子邮件地址等信息。之后是一个带有几个选项的单选按钮。如果单击第一个单选按钮,则显示第1部分。如果选择第二个单元格,则显示第2部分,依此类推。
在WebForms中,这不是什么大问题,因为我刚刚在回发上验证并且说如果Radio1.Selected验证了这一点,如果Radio2.Selected验证了,等等。所以现在我有一个带有[Required]成员的强类型视图,显然不会起作用 - 我不能要求那些并不总是需要的成员。
话虽如此,这是解决问题的正确方法:
这是否有意义,或者方法是否错误?
答案 0 :(得分:0)
这是您需要条件验证的典型场景,即如果设置了某个值,则验证是否需要其他值。使用静态数据注释来实现这一点,这些注释是在编译时烘焙的简单属性,由于它们的声明性质,很快就会变成一场噩梦。好吧,您可以随时滚动自己的自定义验证属性,但属性问题是您必须将属性名称指定为字符串,因为它们需要在编译时知道。
这是我使用FluentValidation.NET的原因之一。不仅验证规则与视图模型是独立的,而且它integrates really nicely with ASP.NET MVC,但处理这样的场景非常容易。您可以拥有包含子节的所有属性的子视图模型,然后根据其验证器内主视图模型上给定属性的值有条件地包含它。