【发布时间】:2018-02-17 16:33:46
【问题描述】:
如何跳过基于模型属性之一的模型验证。例如,如果对象的 WillBeDeleted 属性为 true,则验证器会跳过所有验证规则。
namespace ViewModel
{
public class ContactForm : IViewModel
{
[ValidateNever]
public Contact Item { get; set; }
public Category Category { get; set; }
[Required, DisplayName("First name")]
[StringLength(200, ErrorMessage = "First name should not exceed 200 characters.")]
public string FirstName { get; set; }
[Required, DisplayName("Last name")]
[StringLength(200, ErrorMessage = "Last name should not exceed 200 characters.")]
public string LastName { get; set; }
public List<TelephonesSubForm> Telephones { get; set; } = new List<TelephonesSubForm>();
public List<EmailsSubForm> Emails { get; set; } = new List<EmailsSubForm>();
public class TelephonesSubForm : IViewModel
{
public int Id { get; set; }
public bool MustBeDeleted { get; set; }
[Required]
public TelephoneAndEmailType Type { get; set; }
[Required]
[StringLength(200, MinimumLength = 10, ErrorMessage = "Telephone should not exceed 200 characters.")]
public string Telephone { get; set; }
}
public class EmailsSubForm
{
public int Id { get; set; }
public bool MustBeDeleted { get; set; }
[Required]
public TelephoneAndEmailType Type { get; set; }
[Required]
[StringLength(200, MinimumLength = 10, ErrorMessage = "Email should not exceed 200 characters.")]
public string Email { get; set; }
}
}
}
在给定的示例模型中,当MustBeDeleted 为true 时,表示电子邮件或电话项目将在保存操作中被删除。
我搜索并发现了几个关于条件(自定义)验证的问题,他们建议在检查其验证状态之前从ModelState 中删除特定键。喜欢this一个。
【问题讨论】:
标签: c# asp.net asp.net-mvc validation asp.net-core