【发布时间】:2020-11-19 21:45:38
【问题描述】:
有没有办法根据绑定的模型值关闭某些模型属性的验证。 示例:
public class ContactModel
{
public string Name { get; set; }
public string ContactType { get; set; }
[Required]
public string Phone { get; set; }
[Required]
public string Email { get; set; }
}
这是一些视图模型,它应该检索人的姓名,以及他的电话或电子邮件。如果用户选择其中之一,它应该只验证所选的一个。但选择电话时,Email为空,ModelState.IsValid == false,反之亦然。
我尝试加入验证过程(自定义 ValidationAttribute、IValidatableObject)但没有成功,因为 ValidationContext 没有提供任何有用的上下文 - 我需要在验证 @ 时访问 ContactType 值987654327@。我什至尝试创建自定义活页夹,但在该阶段抑制验证并不能提供预期的结果,因为它只会将验证状态设置为未验证,即 ModelState.IsValid。
目前我发现的唯一解决方案是创建ActionFilter/PageFilter,它将查找是否存在ContactModel 类型的任何模型,并从ModelState 中删除未使用字段的验证错误。但我对这种解决方案感到不舒服(对我来说似乎不合适)。
有什么想法吗?
【问题讨论】:
-
有什么更新吗?我的回复对你有帮助吗?
标签: c# asp.net-core model-validation