Asp.net mvc 我应该通过partials呈现表单的可选部分吗?

Asp.net mvc 我应该通过partials呈现表单的可选部分吗?,asp.net-mvc,Asp.net Mvc,作为学习.NET的练习,我将一些简单的表单转移到MVC中,遇到了一个问题。所讨论的表单是一个包含选项部分的多部分表单。例如,第0节是静态的,包含用户名、真实姓名、电子邮件地址等信息。之后是一个带有多个选项的单选按钮。如果单击第一个收音机,它将显示第1节。如果选择第二个,它将显示第2节,依此类推 在WebForms中,这没有什么大不了的,因为我只是在回发时验证了一下,并说如果Radio1.选择了validate this,如果Radio2.选择validate that,等等。所以现在我有了一个强

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

在WebForms中,这没有什么大不了的,因为我只是在回发时验证了一下,并说如果Radio1.选择了validate this,如果Radio2.选择validate that,等等。所以现在我有了一个强类型视图,其中有[Required]成员,这显然是行不通的——我不能要求不总是需要的成员

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

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

这有意义吗,还是方法错了?

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


这就是我使用的原因之一。不仅验证规则与视图模型是分开的,而且处理这样的场景非常容易。您可以拥有一个子视图模型,其中包含子节的所有属性,然后根据主视图模型中给定属性的值在其验证器中有条件地将其包括在内。

“但是属性的问题是,您必须将属性名称指定为字符串,因为它们需要在编译时已知。”这不是真的。你总是可以从那里施展才能。