MVC 3验证:想要将我的标签变为红色,与验证失败的控件相对应

Dav*_*ich 6 asp.net-mvc-3

在此输入图像描述

我正在使用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不会被触发.

Rap*_*aus 5

禁用客户端验证:

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)