
我正在使用MVC 3验证.我的产品经理希望每个有错误的控件的标签变为红色.
所以'学生名字'标签应该变成红色."电子邮件地址"标签应变为红色.
我试图在div中包装每个错误消息并检查每个div的长度
<div id="divValStudentFirstName">@Html.ValidationMessageFor(m => m.studentFirstName)</div>
Run Code Online (Sandbox Code Playgroud)
在js文件中:
$(document).ready(function () {
if ($("#divValStudentFirstName").length > 1) {
("#divStudentFirstName").css("color", "red");
}
Run Code Online (Sandbox Code Playgroud)
但我没有成功.验证检查在没有完全刷新的情况下完成,因此,验证命中时我的$(document).ready不会被触发.
禁用客户端验证:
public static IHtmlString ValidationLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string labelText = null) {
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var name = ExpressionHelper.GetExpressionText(expression);
string resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? name.Split('.').Last();
if (String.IsNullOrEmpty(resolvedLabelText)) {
return MvcHtmlString.Empty;
}
var tag = new TagBuilder("label");
tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name)));
tag.GenerateId(name);
tag.SetInnerText(resolvedLabelText);
ModelState modelState;
string fullName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
if (html.ViewData.ModelState.TryGetValue(fullName, out modelState)) {
if (modelState.Errors.Count > 0) {
tag.Attributes.Add("style", "color:red");
}
}
return new MvcHtmlString(tag.ToString());
}
Run Code Online (Sandbox Code Playgroud)
编辑
启用客户端验证
我真的不是js中的国王,但这似乎有效(至少在一个简单的情况下)
$('form').submit(function () {
var form = $(this);
$('label').removeClass('field-validation-error');
if (!form.valid()) {
$('.input-validation-error')
.each(function () {
$("label[for='" + $(this).attr("id") + "']").addClass('field-validation-error');
});
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3902 次 |
| 最近记录: |