• MVC 自定义Htmlhelper扩展


       在MVC中,我们不仅可以使用它原来的方法,我们还可以自定义,这不不仅加大了我们开发的效率,同时使界面更简洁。

     具体什么是扩展方法,你可以这样理解,必须是静态且在形参中第一个参数是以this开头,大概先这样理解下哈。接下来,我们就可以实现了。

     首先,我们定义一个名为HtmlExtensions的类,在MVCWeb下。(如果你在别的类库下,当前类库必须引入两个System.Web.WebPages和System.Web.Mvc,不然无法使用TagBuilder此类(自定义标签啊等)若没有找到此Dll,可以在web下的bin文件夹里找)

      这里为了方便,以防我每次引入命名空间,我把此类下的命名空间改为 System.Web.Mvc.Html

      MvcHtmlString.Create()此方法类似于@Html.Raw();

      MvcHtmlString.Create()只能解析字符串,而@Html.Raw()能解析任何对象。

      代码如下:

        

     1 using System.Linq.Expressions;
     2 using System.Web.Mvc;
     3 using System.Web.WebPages.Html;
     4 namespace System.Web.Mvc.Html
     5 {
     6     //HtmlHelper  Extensions
     7     public static class HtmlExtensions
     8     {
     9         #region   DisplayDescription + static MvcHtmlString DisplayDescription(this HtmlHelper htmlHelper, string name)
          //在这里,我们传入一个字符串进去,返回解析后的html文本,在页面我们可以这样使用 @Html.DisplayDescription("请输入用户名") 10 /// <summary> 11 /// DisplayDescription 12 /// </summary> 13 /// <param name="htmlHelper">HtmlHelper</param> 14 /// <param name="name">name</param> 15 /// <returns></returns> 16 public static MvcHtmlString DisplayDescription(this HtmlHelper htmlHelper, string name) 17 { 18 ModelMetadata modelMetadata = ModelMetadata.FromStringExpression(name, htmlHelper.ViewData); 19 return MvcHtmlString.Create(modelMetadata.Description); 20 21 } 22 #endregion 23 24 #region DisplayDescriptionFor + static MvcHtmlString DisplayDescriptionFor<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression) 25 //在这里,我们Lambda进去,返回解析后的html文本,在页面我们可以这样使用 @Html.DisplayDescriptionFor(model=>model.属性名)
          
           /// <summary> 26 /// DisplayDescriptionFor 27 /// </summary> 28 /// <typeparam name="TModel">Model</typeparam> 29 /// <typeparam name="TResult">Result</typeparam> 30 /// <param name="htmlHelper">Htmlper</param> 31 /// <param name="expression">lanmda</param> 32 /// <returns></returns> 33 public static MvcHtmlString DisplayDescriptionFor<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression) 34 { //注意FromLambdaExpression这里跟上面是不一样的,这里是通过lambda来创建的 35 ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 36 return MvcHtmlString.Create(modelMetadata.Description); 37 } 38 #endregion 39 40 #region Submit +static MvcHtmlString DisplaySubmit(this HtmlHelper helper, string value)
          ////在这里,我们Lambda进去,返回解析后的html标签,在页面我们可以这样使用 @Html.Submit("提交") 41 /// <summary> 42 /// Submit 43 /// </summary> 44 /// <param name="helper">Htmlper</param> 45 /// <param name="value">Input Value</param> 46 /// <returns></returns> 47 public static MvcHtmlString Submit(this HtmlHelper helper, string value) 48 { 49 var builder = new TagBuilder("input");//创建一个input标签 50 builder.MergeAttribute("type", "submit");//创建其标签属性 51 builder.MergeAttribute("value", value);//创建其标签属性 52 builder.ToString(TagRenderMode.SelfClosing);//TagRenderMode.SelfClosing标识生成自闭合的标签,例如 <br /> 53 return MvcHtmlString.Create(builder.ToString());//builder.ToString()相当于输出,MvcHtmlString.Create()解析 54 } 55 #endregion 56 57 } 58 }

        以上只是一点点扩展,余下得,需自行测试,生成更多。

  • 相关阅读:
    48. Rotate Image
    83. Remove Duplicates from Sorted List
    46. Permutations
    HTML5笔记
    18. 4Sum
    24. Swap Nodes in Pairs
    42. Trapping Rain Water
    Python modf() 函数
    Python min() 函数
    Python max() 函数
  • 原文地址:https://www.cnblogs.com/wzf-Code/p/5179134.html
Copyright © 2020-2023  润新知