2010-10-03 22 views
10

Giả sử bạn có một ValidationSummary tiêu chuẩn:ASP.NET MVC ValidationSummary với excludePropertyErrors = true làm cho trống rỗng nếu mô hình này là không hợp lệ

<%: Html.ValidationSummary(excludePropertyErrors: true) %> 

Nếu ModelState chứa lỗi mô hình đối với tài sản nhưng không phải cho mô hình chính nó làm cho ValidationSummary HTML sau đây:

<div class="validation-summary-errors"><ul><li style="display:none"></li></ul></div> 

Được hiển thị dưới dạng danh sách trống nhưng vẫn hiển thị vì đường viền màu đỏ xung quanh danh sách. Điều này có vẻ là một lỗi đối với tôi. Tôi có thể tắt rằng trình trợ giúp ValidationSummary sẽ bao giờ hiển thị một danh sách trống không?

Trả lời

11

Tương tự như câu trả lời usr, tôi cố định này như sau:

public static IHtmlString FixedValidationSummary(this HtmlHelper htmlHelper) 
{ 
    return htmlHelper.FixedValidationSummary(false); 
} 

public static IHtmlString FixedValidationSummary(this HtmlHelper htmlHelper, 
    bool excludePropertyErrors) 
{ 
    var result = htmlHelper.ValidationSummary(excludePropertyErrors); 
    return result == null || result.ToString().Contains("display:none") ? null : result; 
} 

Bằng cách này tôi không cần phải thực sự ngã ba bản gốc.

Đồng ý, tuy nhiên, điều này rất khó chịu.

2

Sau khi tôi phát hiện ra rằng không có giải pháp nào bằng cách nhìn vào nguồn tôi giải quyết được vấn đề bằng cách giả mạo phiên bản MVC của mã và sửa đổi một dòng.

+0

Mmmm .. that sux :( –

+0

Bạn chỉ phải chia 3 chức năng. – usr

0

Một biến thể của việc sửa chữa với các lớp Bootstrap là:

public static class ValidationSummaryExtensions 
{ 
    public static MvcHtmlString CleanValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors, string message = null) 
    { 
     if(htmlHelper == null) throw new ArgumentNullException("htmlHelper"); 

     MvcHtmlString validationSummary = null; 
     if (htmlHelper.ViewData.ModelState.ContainsKey(string.Empty)) 
     { 
      var htmlAttributes = new { @class = "alert alert-danger" }; 
      validationSummary = htmlHelper.ValidationSummary(excludePropertyErrors, message, htmlAttributes); 
     } 

     return validationSummary; 
    } 
} 
0

workaround khác là để di chuyển các phong cách để div. Đây là CSS:

div.validation-summary-valid { 
    display: none; 
} 

Khi tóm tắt trả về không có lỗi div không được hiển thị. Khi có lỗi, lớp sẽ tự động được thay đổi thành lỗi xác thực-tóm tắt.

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