2011-07-20 293 views
0

我想知道Html.ValidationSummary是否存在於代碼中。如果Html.ValidationSummary的參數爲true,則標籤div class="validation-summary-valid"不在html中。即Html.ValidationSummary(true),結果,如果Html.ValidationSummary在代碼中,那麼在jquery中沒有可靠的方法來了解它。是否有Html.ValidationSummary設置的屬性?

有沒有一個屬性如此說? Html.ValidationSummary

的存在或不存在[編輯:澄清]

把Html.ValidationSummary具有true參數:

@using (Html.BeginForm()) { 

    @Html.ValidationSummary(true) 

    <b>Hello</b> 

,和不把任何Html.ValidationSummary:

@using (Html.BeginForm()) { 

    <b>Hello</b> 

,這兩個代碼都會產生相同的HTML(查看網頁源代碼):

<b>Hello</b> 

既如此,有一個從jQuery的無 可靠 辦法知道Html.ValidationSummary存在或不存在的代碼

回答

0

它發生,因爲ValidationSummary助手不返回空<div class="validation-summary-errors"/>如果沒有錯誤時(ViewData.ModelState.IsValid回報true)。在這種情況下,你需要定製ValidationSummary其中固定是:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Text; 

namespace System.Web.Mvc 
{ 
    public static class HtmlHelpers 
    { 
     public static MvcHtmlString CustomValidationSummary(this HtmlHelper helper, string validationMessage = null) 
     { 

      StringBuilder summary = new StringBuilder(); 

      summary.Append("<div class=\"validation-summary-errors\">"); 

      if (helper.ViewData.ModelState.IsValid) 
      { 
       summary.Append("</div>"); 

       return new MvcHtmlString(summary.ToString()); 
      } 

      else if (!string.IsNullOrEmpty(validationMessage)) 
      { 
       summary.Append("<ul>"); 
       summary.AppendFormat("<li>{0}</li>", validationMessage); 

       summary.Append("</ul>"); 
       summary.Append("</div>"); 

       return new MvcHtmlString(summary.ToString()); 
      } 


      summary.Append("<ul>"); 

      foreach (KeyValuePair<string, ModelState> state in helper.ViewData.ModelState) 
      { 
       foreach (ModelError error in state.Value.Errors) 
       { 
        summary.AppendFormat("<li>{0}</li>", HttpUtility.HtmlEncode(error.ErrorMessage)); 
       } 

      } 

      summary.Append("</ul>"); 
      summary.Append("</div>"); 

      return new MvcHtmlString(summary.ToString()); 
     } 
    } 
} 

這種定製ValidationSummary助手將產生空validation-summary-errors div即使是沒有錯誤的,換句話說<div class="validation-summary-errors"/>會每次都出現在你的HTML,喜歡你想。

+0

從我從ASP.NET MVC源代碼收集的內容中,它沒有設置任何屬性來指示代碼有ValidationSummary。 :-) – Hao

0

如果你只是在談論jQuery的,你能不能只是做:

if ($('.validation-summary-valid').size() > 0) 
{ 
    // Do Something 
} 
+0

不能這樣做,沒有什麼可以測試的。如果Html.ValidationSummary的參數爲「true」,則該標記不在html中。有什麼奇怪的,只有當出現錯誤時(在提交之後使用'Html.ValidationSummary(true)'),這是標籤創建的唯一時間 – Hao

+0

。如果沒有與該類匹配的html元素,則.size()返回0。也許,我不理解你的問題 –

+0

我編輯了我的問題,詳述了問題 – Hao