博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC 自定义Htmlhelper扩展
阅读量:5308 次
发布时间:2019-06-14

本文共 3026 字,大约阅读时间需要 10 分钟。

   在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         /// 11         ///   DisplayDescription12         /// 13         /// HtmlHelper14         /// name15         /// 
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 #endregion23 24 #region DisplayDescriptionFor + static MvcHtmlString DisplayDescriptionFor
(this HtmlHelper
htmlHelper, Expression
> expression)25 //在这里,我们Lambda进去,返回解析后的html文本,在页面我们可以这样使用 @Html.DisplayDescriptionFor(model=>model.属性名)               ///
26 /// DisplayDescriptionFor27 /// 28 ///
Model
29 ///
Result
30 ///
Htmlper31 ///
lanmda32 ///
33 public static MvcHtmlString DisplayDescriptionFor
(this HtmlHelper
htmlHelper, Expression
> expression)34 { //注意FromLambdaExpression这里跟上面是不一样的,这里是通过lambda来创建的35 ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);36 return MvcHtmlString.Create(modelMetadata.Description);37 } 38 #endregion39 40 #region Submit +static MvcHtmlString DisplaySubmit(this HtmlHelper helper, string value)       在这里,我们Lambda进去,返回解析后的html标签,在页面我们可以这样使用 @Html.Submit("提交")41 ///
42 /// Submit43 /// 44 ///
Htmlper45 ///
Input Value46 ///
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标识生成自闭合的标签,例如
53 return MvcHtmlString.Create(builder.ToString());//builder.ToString()相当于输出,MvcHtmlString.Create()解析54 } 55 #endregion56 57 }58 }

 

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

转载于:https://www.cnblogs.com/wzf-Code/p/5179134.html

你可能感兴趣的文章
鼠标悬停提示文本消息最简单的做法
查看>>
# C++中对PI的引用
查看>>
Java面向对象重要关键字
查看>>
美女CEO三十感言--大家都是出来卖的
查看>>
C、JAVA存储管理不同点
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
rtmp服务器以及rtmp推流/拉流/转发
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
挑战常规--不要这样使用异常
查看>>
malloc函数的用法
查看>>
渐变的参数
查看>>
C#委托详解(3):委托的实现方式大全(续)
查看>>
RaceWeb终于可以在oracle中快速建表了
查看>>
cookie,sessionStorage,localStorage
查看>>
RF环境搭建
查看>>
软件--需求管理
查看>>
读《我是一只IT小小鸟》有感
查看>>
linux中系统管理指令
查看>>
JS常用各种正则表达式
查看>>
Java 定时任务
查看>>