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());
}
------分隔线----------------------------
------分隔线----------------------------