在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()能解析任何对象。

  代码如下:

    

 using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.WebPages.Html;
namespace System.Web.Mvc.Html
{
//HtmlHelper Extensions
public static class HtmlExtensions
{
#region DisplayDescription + static MvcHtmlString DisplayDescription(this HtmlHelper htmlHelper, string name)
      //在这里,我们传入一个字符串进去,返回解析后的html文本,在页面我们可以这样使用 @Html.DisplayDescription("请输入用户名")
/// <summary>
/// DisplayDescription
/// </summary>
/// <param name="htmlHelper">HtmlHelper</param>
/// <param name="name">name</param>
/// <returns></returns>
public static MvcHtmlString DisplayDescription(this HtmlHelper htmlHelper, string name)
{
ModelMetadata modelMetadata = ModelMetadata.FromStringExpression(name, htmlHelper.ViewData);
return MvcHtmlString.Create(modelMetadata.Description); }
#endregion #region DisplayDescriptionFor + static MvcHtmlString DisplayDescriptionFor<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression)
//在这里,我们Lambda进去,返回解析后的html文本,在页面我们可以这样使用 @Html.DisplayDescriptionFor(model=>model.属性名)
      
       /// <summary>
/// DisplayDescriptionFor
/// </summary>
/// <typeparam name="TModel">Model</typeparam>
/// <typeparam name="TResult">Result</typeparam>
/// <param name="htmlHelper">Htmlper</param>
/// <param name="expression">lanmda</param>
/// <returns></returns>
public static MvcHtmlString DisplayDescriptionFor<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression)
{ //注意FromLambdaExpression这里跟上面是不一样的,这里是通过lambda来创建的
ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
return MvcHtmlString.Create(modelMetadata.Description);
}
#endregion #region Submit +static MvcHtmlString DisplaySubmit(this HtmlHelper helper, string value)
      ////在这里,我们Lambda进去,返回解析后的html标签,在页面我们可以这样使用 @Html.Submit("提交")
/// <summary>
/// Submit
/// </summary>
/// <param name="helper">Htmlper</param>
/// <param name="value">Input Value</param>
/// <returns></returns>
public static MvcHtmlString Submit(this HtmlHelper helper, string value)
{
var builder = new TagBuilder("input");//创建一个input标签
builder.MergeAttribute("type", "submit");//创建其标签属性
builder.MergeAttribute("value", value);//创建其标签属性
builder.ToString(TagRenderMode.SelfClosing);//TagRenderMode.SelfClosing标识生成自闭合的标签,例如 <br />
return MvcHtmlString.Create(builder.ToString());//builder.ToString()相当于输出,MvcHtmlString.Create()解析
}
#endregion }
}

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

MVC 自定义Htmlhelper扩展的更多相关文章

  1. ASP.NET MVC Razor HtmlHelper扩展和自定义控件

    先看示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using S ...

  2. asp.net MVC添加HtmlHelper扩展示例和用法

    一.先创建一个HtmlHelper的扩展类,代码: using System; using System.Collections.Generic; using System.Linq; using S ...

  3. MVC采用HtmlHelper扩展和Filter封装验证码的功能

    最近因为有个项目除了登录还有其他很多地方需要用到验证码的功能,所以想到了采用HtmlHelper和ActionFilter封装一个验证码的功能,以便能够重复调用.封装好以后调用很方便,只需在View中 ...

  4. MVC 自定义HtmlHelper帮助类型之分页

    方法一: 在项目中增加App_Code文件夹,新增一个MyHtmlper.cshtml视图文件 写入代码: @helper Pagger(int pageIndex, int pageCount) { ...

  5. 自定义HtmlHelper扩展方法

    核心:通过TagBuilder类实现Html元素的创建 TagBuilder: 前台调用: @Html.Messger("tag","span-tag", @V ...

  6. ASP.NET MVC 之自定义HtmlHelper

    前言 HtmlHelper方法为我们提供很多html标签,只需在页面调用就行了,但是微软并没有把所有的html标签都对应有了扩展方法,需要我们重新自定义HtmlHelper,来满足我们需要. 方法 如 ...

  7. .net mvc HtmlHelper扩展使用

    如果是你是从webform开始接触.net,你应该记得webform开发中,存在自定义控件这东西,它使得我们开发起来十分方便,如今mvc大势所趋,其实在mvc开发时,也存在自定义控件这么个东西,那就是 ...

  8. 在 ASP.NET MVC 中创建自定义 HtmlHelper

    在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些 ...

  9. Asp.Net Mvc 自定义扩展

    目录: 自定义模型IModelBinder 自定义模型验证 自定义视图引擎 自定义Html辅助方法 自定义Razor辅助方法 自定义Ajax辅助方法 自定义控制器扩展 自定义过滤器 自定义Action ...

随机推荐

  1. 谈谈D2

    很多参与了 D2 的人还不知道 D2 是个什么东西,印象中就是很多很多前端工程师汇聚在一起,交流技术.D2 是 D2前端技术论坛的简称,英文名 Designer & Developer Fro ...

  2. SQL Server 系统数据库恢复

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/故障恢复/master 概述 SQL Server 维护一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关 ...

  3. 跟vczh看实例学编译原理——零:序言

    在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...

  4. 我所记录的git命令(非常实用)

    一.前言 记录一下工作中常用到的git命令,只是简单的笔记,欢迎大家交流... [ 顺便问下园友们,怎么感觉博客园发布的博客搜索有时都搜不到,后台编辑能填的都填写了,还是觉得搜索排名不高? 相同的标题 ...

  5. [Linux] linux下安装配置 zookeeper/redis/solr/tomcat/IK分词器 详细实例.

    今天 不知自己装的centos 出现了什么问题, 一直卡在 启动界面, 找了半天没找见原因(最后时刻还是发现原因, 只因自己手欠一怒之下将centos删除了, 而且选择的是在本地磁盘也删除. ..让我 ...

  6. EditText的小细节

    EditText获取焦点时,右边图片的改变例如: <item android:state_window_focused="false" android:drawable=&q ...

  7. Design7:数据删除设计

    在设计一个新系统的Table Schema的时候,不仅需要满足业务逻辑的复杂需求,而且需要考虑如何设计schema才能更快的更新和查询数据,减少维护成本. 模拟一个场景,有如下Table Schema ...

  8. OpenCASCADE Color Scale

    OpenCASCADE Color Scale eryar@163.com Abstract. The color scale is a specialized label object that d ...

  9. gridview里找到控件

    ; i < gvIncomeYG.Rows.Count; i++) { Label lblYG_DYYGSR_BHS = ((Label)gvIncomeYG.Rows[i].Cells[].F ...

  10. 数据可视化-EChart2.0使用总结2

    接上一篇博客,这篇博客主要讨论EChart里面的散点图.气泡图和雷达图.   4.散点图-Scatter Chart 适合场景:三维数据集,但是只有两个维度需要比较.比较的是X轴和Y轴的数据,第三个数 ...