在MVC 3剃须刀中,似乎有两种选择:
在验证摘要
中显示各种属性的所有错误@Html.ValidationSummary(false)
或显示属性本身旁边的错误
@Html.ValidationSummary(true)
但我希望只有某些属性才能在验证摘要中显示错误,(从我的验证覆盖返回的错误消息,例如)
public IEnumerable<ValidationResult> Validate(ValidationContext context)
{
if (string.IsNullOrWhiteSpace(HomePhoneNumber) && string.IsNullOrWhiteSpace(WorkPhoneNumber) && string.IsNullOrWhiteSpace(MobileNumber) && string.IsNullOrWhiteSpace(FaxNumber))
{
yield return new ValidationResult("Please fill in at least one of the phone fields with a phone number");
}
}
和其他更简单的验证,让它们旁边显示错误信息,如模型所定义,例如
[Required(ErrorMessage = "Please fill in your full name")]
这可能吗?
答案 0 :(得分:0)
有可能。
ValidationSummary()
显示string.empty
的ModelErrors作为键。
以下是示例代码:
IList<ValidationResult> validationResults = Validate();
if (validationResults != null) {
foreach (var validationResult in validationResults) {
ModelState.AddModelError(String.Empty, validationResult.ErrorMessage);
}
}
在视图中:
@Html.ValidationSummary(true)
修改强>
以上是ValidationSummery帮助程序如何处理非属性(对象)级别消息的示例。
但是,您的代码应该按预期工作,如果对象的属性中没有错误,请考虑触发验证接口方法IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
。以下是验证检查的默认顺序:
如果任何步骤失败,它将立即返回而不进一步检查。 如果启用了不显眼的客户端验证,则应在客户端触发基于属性的验证。然后验证接口将在模型绑定期间触发。