程序员人生 网站导航

MVC htmlhelp类扩展for lambda表达式方式

栏目:php教程时间:2015-02-03 08:36:58
public static MvcHtmlString InputTextFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression,object attr=null)
        {
            DisplayAttribute disp = null;
            VilidateAttribute vilidate = null;
            string name = string.Empty;
            try
            {
                dynamic exp = expression.Body.GetType().GetProperty("Member").GetValue(expression.Body, null);
                var strName = (string)exp.Name;
                var p = typeof(TModel).GetProperty(strName);
                disp = p.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault() as DisplayAttribute;
                vilidate = p.GetCustomAttributes(typeof(VilidateAttribute), false).FirstOrDefault() as VilidateAttribute;
                name = strName;
            }
            catch (Exception e)
            {
            }
            TagBuilder tag = new TagBuilder("input");
            tag.MergeAttribute("type", "text");
            tag.MergeAttribute("class", "form-control");
            tag.MergeAttribute("id","i-"+ name);
            tag.MergeAttribute("name","n-"+ name);
            tag.MergeAttribute("placeholder", "请输入" + disp.Name);
            //验证
            foreach (var item in vilidate.GetInfo())
            {
                tag.MergeAttribute(item.Key, item.Value);
            }
            //附加
            if(attr!=null)
            {
                foreach (var item in attr.GetType().GetProperties(Reflection.BindingFlags.Instance | Reflection.BindingFlags.Public))
                {
                    tag.MergeAttribute(item.Name, item.GetValue(attr, null).ToString());
                }
            }
            tag.InnerHtml = disp == null ? "未设置Display" : "";
            return new MvcHtmlString(tag.ToString());
        }
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐