2012-04-10 54 views
0

在MVC 3剃须刀似乎有2种选择:只有某些错误信息,如何让出现在验证摘要(MVC3)

显示在验证摘要各种属性的所有错误

@Html.ValidationSummary(false) 
属性

或显示错误,下一次自己

@Html.ValidationSummary(true) 

但我想只有的一些属性施展埃罗中的R验证摘要,

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

这是可能的。 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)。下面是验证检查的默认顺序:

  • 物业属性
  • 类属性
  • 验证界面

如果有任何失败的一步,它会立即返回,而不进一步检查。 如果启用不引人注意的客户端验证,则应在客户端触发基于属性的验证。然后验证界面会在模型绑定期间触发。

+0

2个问题:该代码应该放在哪里 - 在控制器中? – stuartdotnet 2012-04-11 23:48:38

+0

其次:不应该使用ValidationContext参数调用Validate?因为接口需要这样实现。 – stuartdotnet 2012-04-11 23:49:17

+0

是的,通常在控制器中。 – Kibria 2012-04-12 02:52:25