在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 }
以上只是一点点扩展,余下得,需自行测试,生成更多。