zoukankan      html  css  js  c++  java
  • 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 }

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

  • 相关阅读:
    【Excel】获取网页标题的VBA
    【IIS】windows2008 ii7 设置访问网站提示帐号密码登录
    【JS】JQUERY链接符大全
    【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
    CXF远程接口调用 用户名密码校验的方法:
    HTTP 请求/响应 设置/获取 Header参数
    zookeeper 实现分布式锁 demo(新)
    两个 中国标准时间 判断大小
    rabbitMq完整通信(三)---测试类
    rabbitMq完整通信(二)---consumer
  • 原文地址:https://www.cnblogs.com/wzf-Code/p/5179134.html
Copyright © 2011-2022 走看看