我的 View 模型具有多个 bool 属性,在我的 Controller 中,我在进入服务层之前检查了ModelState.IsValid
。现在我想让 ModelState.IsValid
返回 false
如果没有 bool 属性设置为 true,有没有办法实现它?
这是我的示例类
public class Role {
public int Id {get; set;}
[Required(ErrorMessage = "Please enter a role name")]
public string Name {get; set;}
public bool IsCreator {get; set;}
public bool IsEditor {get; set;}
public bool IsPublisher {get; set;}
}
最佳答案
我会在模型上实现您自己的验证方法。你的模型最终会看起来像这样:
public class Role : IValidatableObject {
public int Id {get; set;}
[Required(ErrorMessage = "Please enter a role name")]
public string Name {get; set;}
public bool IsCreator {get; set;}
public bool IsEditor {get; set;}
public bool IsPublisher {get; set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
if (!this.IsCreator && !this.IsEditor && !this.IsPublisher)) {
yield return new ValidationResult("You must be a creator, editor or publisher");
}
}
}
注意模型如何:
- 工具
IValidateableObject
- 有一个名为
Validate
的方法它返回类型IEnumerable<ValidationResult>
在模型绑定(bind)过程中,将自动调用此方法,如果返回验证结果,您的ModelState
将不再有效。因此,在 Controller 中使用这个熟悉的代码将确保您不会采取任何操作,除非您的自定义条件得到验证:
public class SomeController {
public ActionResult SomeAction() {
if (ModelState.IsValid) {
//Do your stuff!
}
}
}
关于c# - ModelState 验证检查多个 bool 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24319014/