【发布时间】:2011-11-04 01:54:12
【问题描述】:
我正在开发 mvc3 应用程序,我创建了一个自定义验证消息来验证一个简单的字段。这个自定义的validationMessage只显示一个带有标题和消息的div,而不是默认的span,我有这个:
@Html.ValidationMessageCustomFor(model => model.FirstName)
这是我的自定义验证的代码:
public static MvcHtmlString ValidationCustomFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
string propertyName = ExpressionHelper.GetExpressionText(expression);
string name = helper.AttributeEncode(helper.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyName));
if (helper.ViewData.ModelState[name] == null ||
helper.ViewData.ModelState[name].Errors == null ||
helper.ViewData.ModelState[name].Errors.Count == 0)
{
return MvcHtmlString.Empty;
}
StringBuilder htmlValidation = new StringBuilder();
htmlValidation.AppendLine("<div>");
htmlValidation.AppendLine("<table>");
htmlValidation.AppendLine("<tr>");
htmlValidation.AppendLine("<td><img src='/Content/Imgages/Error.jpg'></td>");
htmlValidation.AppendLine("</tr>");
htmlValidation.AppendLine("<tr>");
htmlValidation.AppendFormat("<td>{0}</td>", name);
htmlValidation.AppendLine("</tr>");
htmlValidation.AppendLine("<tr>");
htmlValidation.AppendFormat("<td>{0}</td>", helper.ViewData.ModelState[name].Errors[0].ErrorMessage);
htmlValidation.AppendLine("</tr>");
htmlValidation.AppendLine("</table>");
htmlValidation.AppendLine("</div>");
return MvcHtmlString.Create(htmlValidation.ToString());
}
当我使用服务器端验证时这工作正常,但当我激活客户端验证时它不起作用。
默认的 Html.ValidationMessageFor 是的适用于客户端验证,但我的自定义 Html.ValidationMessageCustomFor 不起作用。
你能帮帮我吗?有什么想法吗?
我修改了我的自定义助手,我为跨度添加了“data-valmsg-for”属性,它是代码:
public static MvcHtmlString ValidationCustomFor2<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
string propertyName = ExpressionHelper.GetExpressionText(expression);
string name = helper.AttributeEncode(helper.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyName));
if (helper.ViewData.ModelState[name] == null ||
helper.ViewData.ModelState[name].Errors == null ||
helper.ViewData.ModelState[name].Errors.Count == 0)
{
return MvcHtmlString.Empty;
}
TagBuilder tag = new TagBuilder("span");
tag.Attributes.Add("class", "field-validation-error");
tag.Attributes.Add("data-valmsg-for", name);
tag.Attributes.Add("data-valmsg-replace", "true");
var text = tag.ToString(TagRenderMode.StartTag);
text += "<b>My custom html</b>";
text += tag.ToString(TagRenderMode.EndTag);
return MvcHtmlString.Create(text);
}
但它没有出现,看起来我应该从客户端做一些事情,但我不知道是什么?请问有什么想法吗?
【问题讨论】:
-
您使用的“ValidationMessageCustomFor”辅助方法是什么? MVC3 框架中没有这样的辅助方法。那是您自己编写的助手吗?
-
是的,它是我的自定义助手,它只是显示一个带有验证消息、标题和图像的 div,它在服务器端验证中工作正常,但是当我激活客户端时它不会不起作用,带有图像的 div 不会出现。你能给我一些关于问题所在的想法吗?
-
如果有问题,应该和你自定义的辅助方法有关。您能否发布代码 sn-ps 说明它在做什么,以及它是如何执行验证的?
-
我还应该补充一点,如果您的代码(在辅助方法中)负责验证,MVC 框架不会自动将此逻辑带到 JavaScript 并在客户端进行验证。如果您需要在客户端执行此类验证,您应该在发布表单之前向客户端发送 javascript 代码 sn-ps 以执行验证。
-
你好 Iravanchi,这是我的自定义验证助手的代码:
标签: asp.net-mvc client-side-validation