Настроить итоги проверки - PullRequest
0 голосов
/ 20 июня 2011

Я использовал html.ValidationSummary, чтобы все ошибки отображались в верхней части страницы.Это приведет к отображению списка с ошибками в верхней части страницы.

Пример:

<ul>
<li>UserName is invalid</li>
</ul>

У меня есть необходимость отображать каждый элемент вместо списка в виде пользовательского div с дополнительными тегами html внутри.

Мне нужно, чтобы каждая строка отображалась как короткий пример ниже (это только одна строка):

<div>
<div class="right"><a href="#closeError">Close error</div>
<div class="right"><a href="#Update">Update Field</div>
<label>Error:</label> Name on the page is invalid.
</div>

Как вы оцениваете этот рендеринг?Я решил создать помощник HTML, где я возьму ModelState и получу все ошибки, но не уверен, что это будет работать ...

1 Ответ

2 голосов
/ 21 июня 2011

Я подумал о создании помощника HTML, где я возьму ModelState и получу все ошибки, но не уверен, что это сработает ...

Почему бы это не сработало?

public static class ValidationExtensions
{
    public static IHtmlString MyValidationSummary(this HtmlHelper htmlHelper)
    {
        var formContext = htmlHelper.ViewContext.ClientValidationEnabled 
            ? htmlHelper.ViewContext.FormContext 
            : null;
        if (formContext == null && htmlHelper.ViewData.ModelState.IsValid)
        {
            return null;
        }

        var sb = new StringBuilder();
        var htmlSummary = new TagBuilder("div");
        var modelStates = htmlHelper.ViewData.ModelState.Values;
        sb.AppendLine("<div class=\"right\"><a href=\"#closeError\">Close error</div>");
        sb.AppendLine("<div class=\"right\"><a href=\"#Update\">Update Field</div>");

        if (modelStates != null)
        {
            foreach (ModelState modelState in modelStates)
            {
                foreach (ModelError modelError in modelState.Errors)
                {
                    var userErrorMessageOrDefault = GetUserErrorMessageOrDefault(modelError);
                    if (!string.IsNullOrEmpty(userErrorMessageOrDefault))
                    {
                        sb.AppendFormat("<label>Error:</label> {0}{1}", htmlHelper.Encode(userErrorMessageOrDefault), Environment.NewLine);
                    }
                }
            }
        }

        htmlSummary.InnerHtml = sb.ToString();
        if (formContext != null)
        {
            formContext.ReplaceValidationSummary = true;
        }
        return MvcHtmlString.Create(htmlSummary.ToString(TagRenderMode.Normal));
    }

    private static string GetUserErrorMessageOrDefault(ModelError error)
    {
        if (!string.IsNullOrEmpty(error.ErrorMessage))
        {
            return error.ErrorMessage;
        }
        return null;
    }
}

и затем:

<%= Html.MyValidationSummary() %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...