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。