我有几个字段只需要显示,具体取决于其他字段中的选择。显示这些字段时,它们也是必需的。首先,我试图隐藏视图中的字段。但是,该字段在视图模型中设置为必需,因此ModelState返回为无效,因为该字段是必需的。目前,我正在创建几种不同的视图模型来处理所有不同的可能性,但这很麻烦,因为视图中的表单有很多变体。有没有更好的方法来获得我需要的结果?例如,我可以只使用一个带有所有字段的模型,然后将它们隐藏在视图中,但只在需要显示它们时才需要它们吗?也许我可以动态地在控制器的ActionResult中添加数据注释?
我在这里发现了另一篇可能是同一个问题的帖子:ASP.NET MVC 3: programmatically add DataAnnotation (RequiredAttribute) to view model
答案 0 :(得分:4)
您可以实施IValidatableObject
。这样,您就可以对模型属性进行条件验证。
public class MyViewModel : IValidatableObject
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Condition here)
{
yield return new ValidationResult("Validation error");
}
if (Other Condition here)
{
yield return new ValidationResult("Other Validation error");
}
}
}
另一个选项是MVC Foolproof Validation。