c# - 自定义 JQueryUI ValidationMessageFor 隐藏验证扩展方法

标签 c# asp.net-mvc-3 jquery-ui

我一直致力于为 MVC 创建自定义错误验证消息,以显示 jQueryUI 样式的错误消息。

到目前为止看起来很酷,但我需要在没有错误消息的情况下隐藏整个 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 都显示空文本。

Alert!

Edit2:我注意到在调试时这个方法只被命中一次......也许不引人注目的验证是问题所在。

此代码没有帮助:

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;
} 

最佳答案

为什么不在构建 HTML block 之前对验证消息进行测试?如果为空则没有错误。

var validationMessage = helper.ValidationMessageFor(expression).ToString();
if (!string.IsNullOrEmpty(validationMessage))
{
    // Build your message as in your code.
}

关于c# - 自定义 JQueryUI ValidationMessageFor 隐藏验证扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13682927/

相关文章:

c# - 在 Xamarin.Forms 中处理 WebView 页面的正确方法是什么?

c# - 如何在 C# asp.net mvc3 中合并两个对象

带动画的 jQuery 模式窗口?

c# - 我们如何处理 LINQ to SQL 中的并发错误?

c# - 测试蜂窝网络上的互联网连接

asp.net-mvc - MVC 3 引用自动更新到 MVC 4

javascript - 将日期选择器日期拆分为单独的输入

javascript - jquery ui.slider : add click event to display/hide handle

c# - VB.NET 中存在的 C# 中的 Winforms "application framework"在哪里?

css - MVC3 - 从脚手架结果创建列布局的最佳方法