MVC 自定义 以表达式树为参数的htmlhelper

时间:2022-03-12 14:10:44
public static MvcHtmlString Try<TModel, TProperty>(

    this HtmlHelper<TModel> htmlHelper, //声明这个方法Try是扩展函数,用来扩展HtmlHelper<TModel>

    Expression<Func<TModel, TProperty>> expression//这里声明需要使用时传入表达式树

)

{

    var builder = new TagBuilder("textarea");//建立一个TagBuidlder对象,标签名是textarea

    builder.AddCssClass("ckeditor");//加入一个ckeditor的css类

    builder.MergeAttribute("cols", "");//加入或修改属性cols为80

    builder.MergeAttribute("name", "editor1");

    builder.MergeAttribute("id", expression.Name); // 加入或修改id属性为表达式树的Name

    var value = ModelMetadata.FromLambdaExpression(

        expression, htmlHelper.ViewData

    ).Model;//通过表达式树从元数据中获取具体对象

    builder.SetInnerText(value.ToString());// 设置内部文本

    return MvcHtmlString.Create(builder.ToString());//将builder对象转换MvcHtmlString对象并返回

}

参考凌鸢的文章。