Внедрение обмена сообщениями пользователей ASP.NET MVC - PullRequest
0 голосов
/ 21 декабря 2009

Хорошо, допустим, у вашего представления есть четыре части (каждая с отдельными моделями представления), которые все связаны с основной моделью представления. Вы нажимаете кнопку "Отправить", и все ваши данные публикуются. Вы выполняете некоторую проверку на стороне сервера и замечаете, что ошибки проверки произошли в полях в 3 из 4 частичных. Итак, я хочу опубликовать ошибки проверки, но выше частичного, где они принадлежат.

Что вы думаете о реализации?

Ответы [ 2 ]

2 голосов
/ 22 декабря 2009

Интересный сценарий. Если я вас правильно понимаю: вы хотели бы проверить сообщение сложной формы и, если оно недействительно, верните их в представление и отобразите сообщения об ошибках над соответствующими областями формы. Причина, по которой вы не можете использовать <% = Html.ValidationSummary ()%>, заключается в том, что вам нужны разные сводки для разных областей формы в зависимости от того, что является действительным, а что нет?

Возьмите его с крошкой соли, но я бы написал собственный HtmlHelper для каждой области формы или части. Вы можете основать свой пользовательский код на текущей реализации Html.ValidationSummary и найти код здесь . В каждой пользовательской сводке проверки вы можете искать конкретные ошибки в ModelState и отображать их. У меня мало времени и я не тестировал, но это может помочь вам начать:

public static class CustomValidationExtensions
{
    public static string CustomValidationSummary(this HtmlHelper htmlHelper)
    {
        if (!htmlHelper.ViewData.ModelState.ContainsKey("YourFormName"))
            return null;

        ModelState modelState = htmlHelper.ViewData.ModelState["YourFormName"];
        ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
        ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0];

        if (modelError == null)
            return null;

        TagBuilder builder = new TagBuilder("span");
        builder.MergeAttribute("class", HtmlHelper.ValidationMessageCssClassName);
        builder.SetInnerText(modelError.ErrorMessage);

        return builder.ToString(TagRenderMode.Normal);
    }
}

Это проверяет только один элемент ModelState и отображает html. Вы захотите добавить все свои элементы ModelState вручную или зациклить коллекцию и отобразить только те сообщения об ошибках, которые относятся к этому частичному представлению. В любом случае, я считаю, что вам лучше всего добавлять ошибки в ModelState обычным способом и работать напрямую с ModelState, чтобы отображать только ошибки, относящиеся к этой части. И, конечно, вы можете манипулировать html и делать с выводом все, что пожелаете.

0 голосов
/ 22 декабря 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...