zoukankan      html  css  js  c++  java
  • MVC中My97date无法进行ValidationMessage修改

    上次使用C#扩展方法,对HtmlHelper进行扩展。但是Html.ValidationMessageFor并没有对日期非空验证提示。

    查看源码的时候发现对比自己生成的input,多了data-val这些属性。那么只需要在生成input的时候加上该属性即可。

     var vas = htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata);
     tagBuilder.MergeAttributes(vas);


    完整代码如下:
    public static MvcHtmlString CalendarFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TProperty>> expression)
            {
                TagBuilder tagBuilder = new TagBuilder("input");
                ModelMetadata metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
                string name = ExpressionHelper.GetExpressionText(expression);
                htmlHelper.ValidateFor(expression);
                tagBuilder.MergeAttribute("name", name);
                tagBuilder.GenerateId(name);
                tagBuilder.MergeAttribute("type", "text");
                //核心代码,直接通过这个方法可以获取属性上的验证信息,如:“data-val= ....”。
                var vas = htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata);
                //string类型,看有没长度限制,如果有,增加maxlength,minlength
                if (metadata.ModelType == typeof(string))
                {
                    var len = metadata.ContainerType.GetProperty(name).GetCustomAttribute(typeof(StringLengthAttribute));
                    if (len != null)
                    {
                        var stringlength = (StringLengthAttribute)len;
                        if (stringlength.MaximumLength > 0)
                        {
                            tagBuilder.MergeAttribute("maxlength", stringlength.MaximumLength.ToString());
                        }
                        if (stringlength.MinimumLength > 0)
                        {
                            tagBuilder.MergeAttribute("minlength", stringlength.MinimumLength.ToString());
                        }
                    }
                }
                //如果model值不为,null,进行赋值。
                if (metadata.Model != null)
                {
                    tagBuilder.MergeAttribute("value", metadata.Model.ToString());
                }
                tagBuilder.MergeAttributes(vas);
                tagBuilder.MergeAttribute("class", "Wdate");
                tagBuilder.MergeAttribute("onclick", "WdatePicker({el:'" + name + "'})");
    
                return new MvcHtmlString(tagBuilder.ToString());
            }

    这样大功告成。

  • 相关阅读:
    js生成当前时间
    《JavaScript权威指南》读书笔记2
    firefox与ie的兼容(css,html)
    兼容ie ff 等浏览器的jquery,js层移动方法一
    解决文字撑大容器的方法,ie,ff, div,table
    兼容ie ff 等浏览器的jquery,js层移动方法二
    【CSS经典问题】子元素浮动之后如何撑开父元素
    【CSS技巧】列表横向排列的另一种方法
    【CSS经典问题】图片下面有空隙的解决办法
    MYSQL主从复制、主主复制、双主多从配置
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5916234.html
Copyright © 2011-2022 走看看