Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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# 从模型验证中排除字段_C#_Asp.net Mvc_Model Validation - Fatal编程技术网

C# 从模型验证中排除字段

C# 从模型验证中排除字段,c#,asp.net-mvc,model-validation,C#,Asp.net Mvc,Model Validation,假设我有以下视图模型: public class PersonViewModel { [Required] public String Email { get; set; } [Required] public String FirstName { get; set; } [Required] public String LastName { get; set; } }

假设我有以下
视图模型

    public class PersonViewModel
    {
        [Required]
        public String Email { get; set; }

        [Required]
        public String FirstName { get; set; }

        [Required]
        public String LastName { get; set; }
    }
这是一个
视图模型
不是原始的
实体
,我在两个位置使用此模型,第一个位置我想验证所有字段,但另一个位置我想从模型验证中排除
电子邮件
字段。是否仍要指定从验证中排除字段?

您可以使用

ModelState.Remove("Email");
删除模型状态中与隐藏字段相关的条目

最好的解决方案是将视图模型分为两部分:

public class PersonViewModel
{
    [Required]
    public String FirstName { get; set; }

    [Required]
    public String LastName { get; set; }
}

public class PersonWithEmailViewModel : PersonViewModel
{
    [Required]
    public String Email { get; set; }
}
丑陋的解决方案:

ModelState.Remove("Email");
建议的解决方案:

创建另一个ViewModel。虚拟机应该代表您的视图,因此,如果您的视图没有电子邮件字段,请为其创建一个合适的虚拟机。

谢谢您的回复,但是使用
[Bind(Exclude=“IsAdmin”)]
怎么样?@EAmani:Bind禁止绑定,而不是验证。如果你不想有这些问题,创建专用的视图模型。很好的答案,我把一个类分成两个,让一个成为另一个的超类,让我的验证更容易谢谢你的回答,是的,你是对的,最好为我的第二个视图创建另一个VM。