2012-04-10 63 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