如何使用 ASP.Net MVC 将字段动态设置为必需?

How Can I Set a Field as Required Dynamically Using ASP.Net MVC?

我有几个字段只需要根据其他字段中的选择显示。当显示这些字段时,它们也是必需的。首先,我试图只隐藏视图中的字段。但是,该字段在视图模型中设置为必需,因此 ModelState 返回无效,因为该字段是必需的。现在,我正在创建几个不同的视图模型来处理所有不同的可能性,但这变得很麻烦,因为视图中的表单有几十种变化。有没有更好的方法来获得我需要的结果?例如,我可以只使用一个包含所有字段的模型,然后将它们隐藏在视图中,但只在需要显示时才将它们设为必需吗?也许我可以在控制器的 ActionResult 中动态添加数据注释?

我发现另一个 post 可能是同一个问题:ASP.NET MVC 3: programmatically add DataAnnotation (RequiredAttribute) to view model

您可以实施 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