Настройте ValidationSummary в ASP.NET MVC 2 - PullRequest
4 голосов
/ 26 мая 2010

Я хочу настроить вывод html ValidationSummary в ASP.NET MVC 2

от

<div class="validation-summary-errors">
    <span>Oops! validation was failed because:</span>
    <ul>
        <li>The Title field is required.</li>
        <li>The Body field is required.</li>
    </ul>
</div>

до

<div class="validation-error">
    <p>Oops! validation was failed because:</p>
    <ul>
        <li>The Title field is required.</li>
        <li>The Body field is required.</li>
    </ul>
</div>

Есть ли в asp.net MVC 2 новый способ решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 26 мая 2010

Кажется, нет никакого способа сделать это с помощью шаблонов, что довольно плохо. Если вы посмотрите на код для этого конкретного вспомогательного метода, вы увидите, что HTML-код встроен в сам метод:

public static string ValidationSummary(this HtmlHelper htmlHelper, string message, IDictionary<string, object> htmlAttributes) {
    // Nothing to do if there aren't any errors
    if (htmlHelper.ViewData.ModelState.IsValid) {
        return null;
    }

    string messageSpan;
    if (!String.IsNullOrEmpty(message)) {
        TagBuilder spanTag = new TagBuilder("span");
        spanTag.MergeAttributes(htmlAttributes);
        spanTag.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);
        spanTag.SetInnerText(message);
        messageSpan = spanTag.ToString(TagRenderMode.Normal) + Environment.NewLine;
    }
    else {
        messageSpan = null;
    }

    StringBuilder htmlSummary = new StringBuilder();
    TagBuilder unorderedList = new TagBuilder("ul");
    unorderedList.MergeAttributes(htmlAttributes);
    unorderedList.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);

    foreach (ModelState modelState in htmlHelper.ViewData.ModelState.Values) {
        foreach (ModelError modelError in modelState.Errors) {
            string errorText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, null /* modelState */);
            if (!String.IsNullOrEmpty(errorText)) {
                TagBuilder listItem = new TagBuilder("li");
                listItem.SetInnerText(errorText);
                htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal));
            }
        }
    }
}

Хорошей новостью является то, что с MVC, являющимся открытым исходным кодом, вы можете пойти и взять источник из репозитория CodePlex и настроить его так, как вам нравится.

2 голосов
/ 01 августа 2010

Кроме того, вы можете ссылаться на этот промежуток через CSS и стилизовать его как p.

Это способ ссылки на него - вам нужно соответствующим образом оформить его:

.validation-summary-errors > span { margin: 0px; }
...