Asp.net mvc ASP.NET MVC页面-HTML.ValidationSummary中的超链接

Asp.net mvc ASP.NET MVC页面-HTML.ValidationSummary中的超链接,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我有一个注册页面,如果验证失败,它将使用HTML.ValidationSummary控件显示错误消息 现在,我必须在验证错误消息中显示超链接。但它也将href视为字符串 我正试图用超链接显示的验证消息是:**“系统中已存在用户,请”** 感谢您的回复 这是我的密码: <% using (Html.BeginForm()) {%> <%= Html.ValidationSummary(false) %> <fieldset> <di

我有一个注册页面,如果验证失败,它将使用HTML.ValidationSummary控件显示错误消息

现在,我必须在验证错误消息中显示超链接。但它也将href视为字符串

我正试图用超链接显示的验证消息是:
**“系统中已存在用户,请”**

感谢您的回复

这是我的密码:

<% 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>
<% } %>

;

型号(电子邮件)%>*
model.email,新的{@class=“required email”})%>
型号(电子邮件)%>

*

*
(注意:密码至少应为6个字符)

*



默认的ValidationSummary帮助程序返回一个HTML编码的值;如果您希望在ValidationSummary中使用HTML,则需要创建自己的版本。请查看中的源代码以开始。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方法,您必须在自定义版本中手动实现这些方法,以便重现原始行为。

服务器端解决方案更好,但在客户端,我们可以运行一个快速技巧:

$(function(){
    $(".validation-summary-errors").find("li").each(function () {
        var $this = $(this);
        $this.html($this.text());
    });
});

是的,我明白你的意思。我只是看了一下,有很多内部/私人电话。如果您不想过多地使用他们的代码,我想您可以制作一个助手来包装ValidationSummary的输出并将值解码回Html,但这听起来并不太理想。