从模型验证中排除字段

sab*_*ber 4 c# asp.net-mvc model-validation

假设我有以下内容ViewModel:

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

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

        [Required]
        public String LastName { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

ViewModel不是原创Entity,我在两个地方使用这个模型,在第一个我要验证所有字段,但在另一个我Email要从模型验证中排除字段.无论如何指定从验证中排除字段?

Luk*_*Led 9

您可以使用

ModelState.Remove("Email");
Run Code Online (Sandbox Code Playgroud)

删除模型状态中与隐藏字段相关的条目.

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

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; }
}
Run Code Online (Sandbox Code Playgroud)


Art*_*ess 6

一个丑陋的解决方案:

ModelState.Remove("Email");
Run Code Online (Sandbox Code Playgroud)

推荐的解决方案:
创建另一个 ViewModel。VM 应该代表您的视图,因此如果您的视图没有电子邮件字段,请为其创建一个合适的 VM。