2010-09-22 31 views
6

Có sử dụng cho quá tải AddModelError() có ngoại lệ dưới dạng tham số không?Mục đích của ModelState.AddModelError với tham số ngoại lệ

Nếu tôi bao gồm đoạn mã sau vào bộ điều khiển của tôi:

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

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

Và sau đây trong quan điểm của tôi:

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

Sau đó, chỉ có văn bản "Một cái gì đó đã đi sai" được hiển thị trong các lỗi tóm lược.

Trả lời

3

Kiểm tra nguồn ModelError chấp nhận cả hai và việc sử dụng là do lỗi chuyển đổi loại mô hình.

Trong trường hợp cụ thể này, hãy đi xuống cây ngoại lệ và lấy các ngoại lệ bên trong khi cần thiết để tìm lỗi gốc thực tế thay vì thông báo ngoại lệ cấp cao nhất chung.

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; 
     } 
    } 
} 

Như bạn có thể thấy nó lặp qua ngoại lệ trong ModelError để tìm một định dạng ngoại lệ. Đây là tài liệu tham khảo thực sự duy nhất mà tôi có thể tìm thấy trong cả MVC 2 và MVC 3.

Điều đó nói rằng có thể không cần thiết để sử dụng thường xuyên.

+1

Tôi nhận thấy MVC 3 dường như không bao gồm ngoại lệ trong ValidationSummary không biết nếu đó là lỗi hoặc do thiết kế mặc dù - nhưng họ nên đã nêu rõ trong tài liệu của họ. Tôi đã thử đi qua FormatException mới ("cái gì đó") - không hoạt động. –

Các vấn đề liên quan