Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用ASP.NETMVC动态设置所需的字段?_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 如何使用ASP.NETMVC动态设置所需的字段?

C# 如何使用ASP.NETMVC动态设置所需的字段?,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有几个字段,只需要根据其他字段中的选择来显示。显示这些字段时,它们也是必需的。首先,我试图在视图中隐藏字段。但是,该字段在视图模型中被设置为必需的,因此ModelState返回为无效,因为该字段是必需的。目前,我正在创建几个不同的视图模型来处理所有不同的可能性,但这变得越来越麻烦,因为视图中的表单有几十种变体。有没有更好的方法来获得我需要的结果?例如,我是否可以只使用一个模型,其中包含所有字段,然后将它们隐藏在视图中,但仅在需要显示它们时才将其设置为必需?也许我可以在控制器的ActionRes

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


我在这里发现了另一个可能与此问题相同的帖子:

您可以实现
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");
            }
        }
    }
公共类MyViewModel:IValidatableObject
{ 
公共IEnumerable验证(ValidationContext ValidationContext)
{ 
如果(此处的条件)
{
返回新的ValidationResult(“验证错误”);
}
如果(此处的其他条件)
{
返回新的ValidationResult(“其他验证错误”);
}
}
}

另一个选项是。

是否有方法将此概念与ActionResult中的条件而不是视图模型一起使用?我不知道这有什么帮助。我认为这只是给了我不同的错误信息。这种万无一失的验证似乎很有用。我将进一步研究这个问题。