настраиваемая проверка. Основной HTML-помощник не работает на стороне клиента. - PullRequest
2 голосов
/ 27 марта 2012

Я работаю над приложением mvc3, и мне нужно изменить стиль сообщения ValidatioSummary, для этого я создал свой собственный помощник HTM, который выглядит следующим образом:

public static MvcHtmlString MyValidationSummary(this HtmlHelper helper){

    string retainHtml +="";
    int counterror = 0;
    if (helper.ViewData.ModelState..IsValid)
    {
       TagBuilder tag = new TagBuilder("div");
       tag.Attributes.Add("class", "validation-summary-valid");
       tag.Attributes.Add("data-valmsg-summary", "true");
       tag.InnerHtml += "<span> There was" + countererror + "errors found<ul><li></li></ul>"
       retainHtml += tag.ToString();

       return MvcHtmlString.Create(retainHtml);
    }

    if (!helper.ViewData.ModelState.IsValid)
    {
       TagBuilder tag = new TagBuilder("div");
       tag.Attributes.Add("class", "validation-summary-errors");
       tag.Attributes.Add("data-valmsg-summary", "true");
       retainHtml +="<div class='validation-summary-errors'><span>";   
       counterror = 1;
       string temretainhtml ="";

       foreach (var key in helper.ViewData.ModelState.keys)
       }
           foreach (var err in helper.ViewData.ModelState[key].Errors)
               temretainhtml += "<li>Error  " + countererror++ + "  :  "  + err.ErrorMessage + "</li>";
       }

       retainHtml += "Error ! there was " + --countererror  + " errors found";
       retainHtml += "</span>";
       retainHtml += "<ul>";
       retainHtml += temretainhtml;
       retainHtml += "</ul></div>";
       }
    return MvcHtmlString.Create(retainHtml);
   }
  }
 }

Это прекрасно работает с проверкой на стороне сервера, но мне нужно реализовать этот стиль и на проверке на стороне клиента, прямо сейчас, формы отображают validationSummary в верхней части страницы на стороне клиента, но с форматом MVC по умолчанию,не тот, который я указал в своем помощнике по HTML, я провел много исследований, но, к сожалению, мне не повезло, может мне нужно внести какие-либо изменения в файл jquery.validate.unobtrusive.js, чтобы применить эти изменения?или мне нужно создать еще один файл проверки в jquery?Мой опыт работы с jquery очень плохой, и я сейчас очень потерян, любая помощь, которую вы можете оказать мне, пожалуйста, будет очень признательна.

Большое спасибо !!!

Ответы [ 2 ]

1 голос
/ 27 апреля 2012

Поздний ответ: С jquery.validate.unobtrusive.js сложно зацепиться. Вместо изменения файла (никогда не бывает идеальным) попробуйте это:

Прослушайте следующее событие

form.bind("invalid-form.validate", handler...

А затем создайте собственное резюме:

form.bind("invalid-form.validate", function (evt, validator) {
    var container = $(this).find("[data-valmsg-summary=true]");
    var list = container.find("ul");

    if (list && list.length && validator.errorList.length) {
        list.empty();
        container.addClass("validation-summary-errors").removeClass("validation-summary-valid");

        $.each(validator.errorList, function () {
            $("<li style='color:#00aa00'/>").html(this.message).appendTo(list);
        });
    }
});
0 голосов
/ 28 марта 2012

Вы должны взглянуть на конец этого урока:

http://thepursuitofalife.com/asp-net-mvc-3-unobtrusive-javascript-validation-with-custom-validators/

...