私は、エラー メッセージ jQueryUI スタイルを表示する MVC 用のカスタム エラー検証メッセージの作成に取り組んできました。
これまでのところクールに見えますが、エラー メッセージが表示されない場合は div 全体を非表示にする必要があります...どうすればよいですか?
これが私のhtmlヘルパー拡張メソッドです:
public static MvcHtmlString MyValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
TagBuilder widgetDiv = new TagBuilder("div");
widgetDiv.AddCssClass("ui-widget");
widgetDiv.Attributes.Add("style", "font-size: 10px");
TagBuilder errorDiv = new TagBuilder("div");
errorDiv.AddCssClass("ui-state-error ui-corner-all");
errorDiv.Attributes.Add("style", "padding:0 .7em;");
TagBuilder paragraph = new TagBuilder("p");
TagBuilder span = new TagBuilder("span");
span.AddCssClass("ui-icon ui-icon-alert");
span.Attributes.Add("style", "float: left; margin-right: .3em;");
TagBuilder strong = new TagBuilder("strong");
strong.InnerHtml = "Alert: ";
paragraph.InnerHtml += span.ToString(TagRenderMode.Normal);
paragraph.InnerHtml += strong.ToString(TagRenderMode.Normal);
paragraph.InnerHtml += helper.ValidationMessageFor(expression).ToString();
errorDiv.InnerHtml += paragraph.ToString(TagRenderMode.Normal);
widgetDiv.InnerHtml += errorDiv.ToString(TagRenderMode.Normal);
return MvcHtmlString.Create(widgetDiv.ToString(TagRenderMode.Normal));
}
そして、これが生成する html です。
<div class="ui-widget">
<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
<strong>Alert:</strong> Sample ui-state-error style.</p>
</div>
</div>
ある条件に従って空白の文字列を返す必要があると仮定しています...どうすればよいですか?
編集:問題を説明するために画像を追加しました - div は関係なく空のテキストで表示されます。
Edit2: このメソッドをデバッグするときに、1 回しかヒットしないことに気付きました...おそらく目立たない検証が問題です。
このコードは役に立ちませんでした:
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;
}