在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软件和使用方法

    MacBook 初体验 作者是刚从Windows下转到mac时写的,这篇文章对也主要介绍了Mac下开发环境的部署.软件的安装和卸载.常用快捷键.文件系统的介绍. http://liujiacai.ne ...

  2. ASP.NET MVC学前篇之Ninject的初步了解

    ASP.NET MVC学前篇之Ninject的初步了解 1.介绍 废话几句,Ninject是一种轻量级的.基础.NET的一个开源IoC框架,在对于MVC框架的学习中会用到IoC框架的,因为这种IoC开 ...

  3. JavaScript学习笔记之string

    字符串定义: 1,var myString=“内容”:or var myString=‘内容’ 2,var myString= new String(“内容”)           ---〉创建对象, ...

  4. 2013 duilib入门简明教程 -- 界面布局(9)

        上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayou ...

  5. javascript命名规范

    javascript命名规范 3.命名 命名的方法通常有以下几类: a).命名法说明 1).camel命名法,形如thisIsAnApple 2).pascal命名法,形如ThisIsAnApple ...

  6. 使用JAVA编写电话薄程序,具备添加,查找,删除等功能

    //该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...

  7. 精通visual c++指纹模式识别系统算法及实现

    通过学习,掌握以下几个问题: 1.核心算法,并且向GVF衍生: 2.核心库封装的方法 2016年11月16日06:52:51 昨日实现了梯度场和频率场的计算.最大的感觉就是建立基础代码库的重要性. 如 ...

  8. python中协程

    在引出协成概念之前先说说python的进程和线程. 进程: 进程是正在执行程序实例.执行程序的过程中,内核会讲程序代码载入虚拟内存,为程序变量分配空间,建立 bookkeeping 数据结构,来记录与 ...

  9. Vue.js学习笔记(4)

    分享一段将 json数组数据以  csv格式导出的代码: html: <button class="btn btn-danger" @click='exportData'&g ...

  10. 用html5的视频元素所遇到的第一个坑

    html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...