2010-09-22 24 views
6

AddModelError() parametresinde İstisna alan aşırı yükleme için bir kullanım var mı?ModelState.AddModelError'ın istisna parametresiyle kullanılması

aşağıdaki benim denetleyicisi kodu eklerseniz:

ModelState.AddModelError("", new Exception("blah blah blah")); 
ModelState.AddModelError("", "Something has went wrong"); 

if (!ModelState.IsValid) 
    return View(model); 

Ve bana göre şu:

<%= Html.ValidationSummary("Please correct the errors and try again.") %> 

Sonra yalnızca metin "Bir şeyler ters gitti etmiştir" hatası görüntülenir özet.

cevap

3

ModelError kaynağının kontrol edilmesi her ikisini de kabul eder ve kullanım model tipi dönüştürme hataları içindir.

Bu özel durumda, istisna ağacından aşağıya inmek ve genel üst düzey bir özel durum iletisi yerine gerçek kök hatasını bulmak için gerekli olduğunda iç istisnaları kapmak gerekir.

foreach (ModelError error in modelState.Errors.Where(err => String.IsNullOrEmpty(err.ErrorMessage) && err.Exception != null).ToList()) { 
    for (Exception exception = error.Exception; exception != null; exception = exception.InnerException) { 
     if (exception is FormatException) { 
      string displayName = propertyMetadata.GetDisplayName(); 
      string errorMessageTemplate = GetValueInvalidResource(controllerContext); 
      string errorMessage = String.Format(CultureInfo.CurrentCulture, errorMessageTemplate, modelState.Value.AttemptedValue, displayName); 
      modelState.Errors.Remove(error); 
      modelState.Errors.Add(errorMessage); 
      break; 
     } 
    } 
} 

bunu bir FormatException bulmak için ModelError içinde istisna döngü oluyor görebileceğiniz gibi. Bu, MVC 2 ve MVC 3'te bulabildiğim tek gerçek referanstır.

Bu, muhtemelen düzenli kullanım için gereksiz olduğunu söyledi.

+1

MVC 3'ün ValidationSummary'daki istisnaları içermediğini fark ettim, bir hata mı, yoksa tasarım olsa da, bilmiyorum, ancak belgelerinde açıkça belirtmiş olmalılar. Yeni FormatException ("bir şey") geçirmeyi denedim - ya da çalışmadı. –