私はMVC 3の検証を使用していますが失敗したコントロールに対応する私のラベルの赤をオンにしたいです。私のプロダクトマネージャーは、エラーが発生した各コントロールのラベルを赤にしたいと考えています。
「生徒名」のラベルは赤色に変わるはずです。 「メールアドレス」のラベルが赤色に変わります。
私はdivの中に各エラーMSGをラップし、JSファイル内の各div要素
<div id="divValStudentFirstName">@Html.ValidationMessageFor(m => m.studentFirstName)</div>
の長さをチェックしてみました:
$(document).ready(function() {
if ($("#divValStudentFirstName").length > 1) {
("#divStudentFirstName").css("color", "red");
}
をしかし、私は何の成功を持っていません。検証チェックは完全なリフレッシュなしで行われ、その結果、検証中にmy $(document).readyが起動されません。私は本当にjsの中の王じゃない
クライアント側の検証が
を有効に
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());
}
EDITが、これは上でも(動作するようです:
ビューのコードの一部を表示できますか?あなたはLabelFor ...ラベルを使用していますか、EditorForは入力をしていますか? –
はいラファエル、その典型的な実装
上のdivでグループ化された検証と