在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. 给Mac OS X的“逻辑宗卷组”改名

    近日更新了Mac OS X的10.10版本——Yosemite,感觉良好,但当我在打开磁盘工具的时候发现了一个美中不足的地方,磁盘宗卷组的名字居然还是我之前的“Mavericks”,如图: 如何对它进 ...

  2. JS实战 · 零碎笔记

    onclick:单击时触发事件 onmouseover:鼠标进入时触发事件 onmouseout:鼠标离开时触发事件   事件三要素:最基础的内容 事件源:有监听的HTML 标签,能响应事件的HTML ...

  3. GitHub的使用记录

    前言: 该贴为笔者在使用GItHub中的一些使用注意,及Git的基本命令,会一直记录笔者在使用GitHub中可能产生的错误及解决方法(会一直更新中),待一些Git初使用者参考,如果有说明不详细或不对的 ...

  4. Atitit 教育与培训学校 的计划策划 v4 qc18

    Atitit 教育与培训学校 的计划策划 v4 qc18 1.1. 版本历史12. 教育历史的前世今生12.1. 自学vs 家庭学校vs 私立学校vs 公立学校模式 vs 企业内部学校 vs 其他商业 ...

  5. Elasticsearch5.0 安装问题集锦

    使用Elasticsearch5.0 必须安装jdk1.8 [elsearch@vm-mysteel-dc-search01 bin]$ java -version java version &quo ...

  6. 一个美术需求引发的Custom Inspector

    需求 Editor模式下,在运行或者非运行状态下,能够按照指定的变化率来自动改变material中属性数值. 需求分析 如何在Editor模式下获得一个游戏对象及其组件,尤其是在非运行状态下?我们知道 ...

  7. Excel 导入到Datatable 中,再使用常规方法写入数据库

    首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎.名字为AccessDatabaseEngine.exe.这里不过多介绍了哦.它的数据库 ...

  8. C#字符串排序效率

    前几天看到个node.js和C#比较性能的文章,在那篇文章中C#的性能居然输了,按理说这是不可能的,除非有什么特殊的情况拖慢了性能.查看其异步的写法,最终发现没有什么问题,起码不是主要问题.后来用VS ...

  9. 动态给div中新增html

    小颖最近接触的项目中用到了    innerHTML 所以小颖今天就自己做了个demo,当当当当代码请看下方: 页面效果:

  10. 感恩回馈,《ASP.NET Web API 2框架揭秘》免费赠送

      在继<WCF全面解析(上下册)>.<ASP.NET MVC 4框架揭秘>之后,我的另一本书<ASP.NET Web API 2框架揭秘>( 本书详细信息见< ...