Asp.net mvc ASP.NET MVC页面-HTML.ValidationSummary中的超链接
我有一个注册页面,如果验证失败,它将使用HTML.ValidationSummary控件显示错误消息 现在,我必须在验证错误消息中显示超链接。但它也将href视为字符串 我正试图用超链接显示的验证消息是: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
**“系统中已存在用户,请”**
感谢您的回复
这是我的密码:
<% 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,但这听起来并不太理想。