我应该通过局部渲染表单的可选部分吗?

时间:2011-05-16 16:43:46

标签: asp.net-mvc

作为学习.NET的练习,我将一些简单的表单转移到MVC中,并遇到了一个问题。有问题的表格是一个包含选项部分的多部分表格。例如,第0部分是静态的,包含用户名,真实姓名,电子邮件地址等信息。之后是一个带有几个选项的单选按钮。如果单击第一个单选按钮,则显示第1部分。如果选择第二个单元格,则显示第2部分,依此类推。

在WebForms中,这不是什么大问题,因为我刚刚在回发上验证并且说如果Radio1.Selected验证了这一点,如果Radio2.Selected验证了,等等。所以现在我有一个带有[Required]成员的强类型视图,显然不会起作用 - 我不能要求那些并不总是需要的成员。

话虽如此,这是解决问题的正确方法:

  • 在我的强类型视图模型类中创建属于第0部分的成员。
  • 在我的视图模型类中创建对每个partial的强类型类的引用。
  • 创建部分视图,然后在主视图中渲染它们。
  • 根据选择的单选按钮,渲染相应的局部视图。
  • 像往常一样验证模型......希望能够级联到部分模型。

这是否有意义,或者方法是否错误?

1 个答案:

答案 0 :(得分:0)

这是您需要条件验证的典型场景,即如果设置了某个值,则验证是否需要其他值。使用静态数据注释来实现这一点,这些注释是在编译时烘焙的简单属性,由于它们的声明性质,很快就会变成一场噩梦。好吧,您可以随时滚动自己的自定义验证属性,但属性问题是您必须将属性名称指定为字符串,因为它们需要在编译时知道。

这是我使用FluentValidation.NET的原因之一。不仅验证规则与视图模型是独立的,而且它integrates really nicely with ASP.NET MVC,但处理这样的场景非常容易。您可以拥有包含子节的所有属性的子视图模型,然后根据其验证器内主视图模型上给定属性的值有条件地包含它。