Страница ASP.NET MVC - гиперссылки в HTML.ValidationSummary - PullRequest
2 голосов
/ 27 апреля 2010

У меня есть страница регистрации, и если проверка не удалась, она отображает сообщения об ошибках, используя элемент управления HTML.ValidationSummary.

Теперь мне нужно отобразить гиперссылку в этом сообщении об ошибке проверки. Но это относится и к href как к строке.

Сообщение проверки, которое я пытаюсь отобразить с гиперссылкой: **"User already exists in the system, please <a href='../Login.aspx'>login</a>"**

Ценю ваши ответы.

Вот мой код:

<% using (Html.BeginForm()) {%>
    <%= Html.ValidationSummary(false) %>
    <fieldset>
    <div class="cssform">;
        <p>
            <%= Html.LabelFor(model => model.email)%><em>*</em>
            <%= Html.TextBoxFor(model => model.email, new { @class = "required email" })%>
            <%= Html.ValidationMessageFor(model => model.email)%>
        </p>
        <p>
            <%= Html.Label("Confirm email")%><em>*</em>
            <%= Html.TextBox("confirm_email")%>
            <%= Html.ValidationMessage("confirm_email") %>
        </p>
        <p>
            <%= Html.Label("Password")%><em>*</em>
            <%= Html.Password("Password", null, new { @class = "required" })%>
            <%= Html.ValidationMessage("Password")%><br />
            (Note: Password should be minimum 6 characters)
        </p>
        <p>
            <%= Html.Label("Confirm Password")%><em>*</em>
            <%= Html.Password("confirm_password")%>
            <%= Html.ValidationMessage("confirm_password") %>
        </p><hr />
    </div>
    <p><input type="submit" value="Register" /></p>
    </fieldset>
<% } %>

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Решение на стороне сервера лучше, но на стороне клиента мы могли бы выполнить быстрый трюк:

$(function(){
    $(".validation-summary-errors").find("li").each(function () {
        var $this = $(this);
        $this.html($this.text());
    });
});
3 голосов
/ 27 апреля 2010

Помощник ValidationSummary по умолчанию возвращает значение в кодировке HTML; если вы хотите разрешить использование HTML внутри ValidationSummary, вам нужно создать свою собственную версию. Взгляните на исходный код MVC 2 RTM , чтобы начать. ValidationSummary HtmlHelper определен в классе System.Web.Mvc.Html.ValidationExtensions (находится в mvc2-rtm-sources \ src \ SystemWebMvc \ Mvc \ Html).

Взглянув на исходный код в ValidationExtensions.cs, вы увидите, что listItem.SetInnerText(errorText) является виновником:

if (modelStates != null) {
    foreach (ModelState modelState in modelStates) {
        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));
            }
        }
    }
}

Изменение кода на listItem.InnerHtml = errorText приведет к желаемому поведению; однако, это не будет так просто, потому что метод ValidationSummary вызывает некоторые внутренние методы System.Web.Mvc, которые вам придется вручную реализовать в вашей настроенной версии для воспроизведения исходного поведения.

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