什么是HtmlHelper辅助方法?

其实就是HtmlHelper类的扩展方法,如下所示:

namespace System.Web.Mvc.Html
{
public static class FormExtensions//表单相关扩展方法,例如创建表单标签等。 public static class InputExtensions//这里包含了所有input,例如:text,button,readiobutton等等。 public static class LinkExtensions//链接相关方法 public class MvcForm : IDisposable//与客户端控件无关 public static class RenderPartialExtensions//这是输出PartialView public static class SelectExtensions//输出下拉框 public static class TextAreaExtensions//输出多行文本框 public static class ValidationExtensions//输出相关表单元素验证。
}

比如对于扩展类InputExtensions,MVC框架本身对此已有扩展:

namespace System.Web.Mvc.Html
{
// Summary:
// Represents support for HTML input controls in an application.
public static class InputExtensions
{
public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name);
}
}

通过对HtmlHelper进行扩展来构建自己的HtmlHelper辅助方法

System.Web.Mvc.Html下的HtmlHelper只能完成大部分html控件的输出,有一些我们经常用到的东东它却没有,怎么办?自己动手吧~

在我们扩展之前,有个叫TagBuilder的类(生成标签)比较好用,你不必纠结于它的细节,只要大概知道他有那些方法就行:

   public TagBuilder(string tagName);
public void AddCssClass(string value);//增加样式
public void GenerateId(string name);//设置控件ID
private string GetAttributesString();
public void MergeAttribute(string key, string value);//设置属性值
public void MergeAttribute(string key, string value, bool replaceExisting);
public void MergeAttributes<TKey, TValue>(IDictionary<TKey, TValue> attributes);
public void MergeAttributes<TKey, TValue>(IDictionary<TKey, TValue> attributes, bool replaceExisting);
public void SetInnerText(string innerText);//设置显示文本
public override string ToString();
public string ToString(TagRenderMode renderMode);//输出控件html

现在可以开始扩展了!

A、扩展img标签

namespace System.Web.Mvc
{
public static class ImageExtensions
{
public static string Image(this HtmlHelper helper, string id, string url, string alternateText)
{
return Image(helper, id, url, alternateText, null);
}
public static string Image(this HtmlHelper helper, string id, string url, string alternateText, object htmlAttributes)
{
// 创建IMG标签
var builder = new TagBuilder("img"); // 增加ID属性
builder.GenerateId(id); // 增加属性
builder.MergeAttribute("src", url);
builder.MergeAttribute("alt", alternateText);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); // 输出完整的img标签
return builder.ToString(TagRenderMode.SelfClosing);
} }
}

调用:@Html.Image("img1", http://img/111.jpg, "这是一张图片", new {border="4px"})

输出:<img id="img1" src="http://img/111.jpg" style="border:4px;" alt="这是一张图片"/>

B、扩展div标签

namespace System.Web.Mvc
{
public static class DivExtensions
{
public static String Div(this HtmlHelper helper, String id, String content, String cssStyle, object htmlAttrs)
{
TagBuilder builder = new TagBuilder("div");
//替换“.”为“_”
builder.IdAttributeDotReplacement = "_";
builder.GenerateId(id);
builder.MergeAttributes(new RouteValueDictionary(htmlAttrs));
builder.AddCssClass(cssStyle);
builder.InnerHtml=content;
return builder.ToString(TagRenderMode.Normal); //代表是双面标签
}
}
}

调用:

@Html.Div("MyDiv.1", "扩展方法", "MyClassStyle", new { style="border:solid red 1px;" })

输出:

<div id="MyDiv_1" class="MyClassStyle" style="border:solid red 1px;">扩展方法</div>

C、扩展Span标签

namespace System.Web.Mvc
{
public static class SpanExtensions
{
public static string Span(this HtmlHelper helper, string id, string text, string css, object htmlAttributes)
{
//创意某一个Tag的TagBuilder
var builder = new TagBuilder("span"); //创建Id,注意要先设置IdAttributeDotReplacement属性后再执行GenerateId方法.
builder.IdAttributeDotReplacement = "-";
builder.GenerateId(id); //添加属性
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); //添加样式
builder.AddCssClass(css);
//或者用下面这句的形式也可以: builder.MergeAttribute("class", css); //添加内容,以下两种方式均可
//builder.InnerHtml = text;
builder.SetInnerText(text); //输出控件
return builder.ToString(TagRenderMode.Normal); }
}
}

调用:

@Html.Span("span.test", "使用TagBuilder帮助构建扩展方法", "ColorRed", new { style="font-size:15px;" })

输出:

<span id="span-test" class="ColorRed" style="font-size: 15px;">使用TagBuilder帮助构建扩展方法</span>

D、扩展ul、li标签

namespace System.Web.Mvc
{
public static class UlLiExtensions
{
public static MvcHtmlString UlLi(this HtmlHelper helper, string[] listItems) { TagBuilder ulTag = new TagBuilder("ul"); foreach (string item in listItems) { TagBuilder liTag = new TagBuilder("li"); liTag.SetInnerText(item); ulTag.InnerHtml += liTag.ToString(); } return new MvcHtmlString(ulTag.ToString()); } }
}

调用:

@Html.List(new string[]{"上海","深圳","北京","广州"})

输出:

<ul>
<li>上海</li>
<li>深圳</li>
<li>北京</li>
<li>广州</li>
</ul>

E、扩展截取字符串方法(当我们在显示某一个字段时,如果太长,显示的时候最好截取一下,最好是做成扩展方法来用)

namespace System.Web.Mvc
{
public static class CutStringExtensions
{
public static string CutString(this System.Web.Mvc.HtmlHelper helper, string content, int length)
{
if (content.Length > length)
{
return content.Substring(0, length) + "...";
}
else
{
return content;
}
} }
}

此处只是抛砖引玉,更多的用法要根据实际需求来进行开发~

ASP.NET MVC扩展之HtmlHelper辅助方法的更多相关文章

  1. 转:ASP.NET MVC扩展之HtmlHelper辅助方法

    1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...

  2. MVC扩展之HtmlHelper辅助方法

    1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...

  3. MVC学习系列4--@helper辅助方法和用户自定义HTML方法

    在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...

  4. ASP.NET MVC扩展库

    很多同学都读过这篇文章吧 ASP.NET MVC中你必须知道的13个扩展点,今天给大家介绍一个ASP.NET MVC的扩展库,主要就是针对这些扩展点进行.这个项目的核心是IOC容器,包括Ninject ...

  5. 在Asp.Net MVC中用Ajax回调后台方法

    在Asp.Net MVC中用Ajax回调后台方法基本格式: var operData = ...; //传递的参数(action中定义的) var type = ...; //传递的参数(action ...

  6. ASP.NET MVC 应用提速的十种方法

    [编者按]本文作者为 DZone 社区的最具价值博主(MVB) Jonathan Danylko,主要介绍为 ASP.NET MVC 应用提速的十种方法.由国内 ITOM 管理平台 OneAPM 编译 ...

  7. ASP.NET MVC ETag & Cache等优化方法

    背景 最近有一个项目是用SmartAdmin + Jquery + EasyUI 一个ASP.NET MVC5的项目,一直存在一个性能问题,加载速度比较慢,第一次加载需要(在没有cache的情况下)需 ...

  8. ASP.net MVC 文件下载的几种方法

      ASP.net MVC 文件下载的几种方法(欢迎讨论) 在ASP.net MVC 中有几种下载文件的方法前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不 ...

  9. Asp.Net MVC 扩展 Html.ImageFor 方法详解

    背景: 在Asp.net MVC中定义模型的时候,DataType有DataType.ImageUrl这个类型,但htmlhelper却无法输出一个img,当用脚手架自动生成一些form或表格的时候, ...

随机推荐

  1. phpqrcode生成带logo的二维码图片

    <?php //include_once('lib/QrReader.php'); //$qrcode = new QrReader('201708211144474410.jpg'); //图 ...

  2. 简单邮件传输协议SMTP

    1.SMTP是由源地址到目的地址传送邮件的一组规则,用来控制信件的中转方式. 2.SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送或者中转发出的邮件,客户端通过SMTP命令与SMTP服务器进 ...

  3. sed 插入和替换

    sed -i '/参考行/i\插入内容' *.ksh sed -i 's,原内容,替换后内容,g' *.ksh

  4. Xamarin.Forms教程下载安装JDK配置环境变量

    Xamarin.Forms教程下载安装JDK配置环境变量 Xamarin.Form环境配置下载安装JDK JDK是编程Java程序必须的软件.也许有人会问我们用的C#为什么还有Java呢?这是因为我们 ...

  5. 【高斯消元】CDOJ1784 曜酱的线性代数课堂(二)

    高斯消元求矩阵秩板子. #include<cstdio> #include<cmath> #include<algorithm> #include<cstri ...

  6. 【常见加密方法】Base64编码&Tea算法简介

    Base64编码 [Base64编码是什么] Base64是一种基于64个可打印字符来表示二进制数据的表示方法. ——维基百科 Base64,顾名思义,是基于64种可视字符的编码方式.这64种符号由A ...

  7. Pointers and Strings

    The special relationship between arrays and pointers extends to C-style strings.Consider the followi ...

  8. 修改activeMQ端口号

    原文:http://jingyan.baidu.com/article/3ea51489fba6a152e61bbacc.html 修改TCP 61616端口 打开您的mq安装目录 请看下图 如下图所 ...

  9. Android 垃圾回收,用软引用建立缓存

    内存对于手机来说是非常重要的. 下面总结了我们在注意创建对象时的规则,以及怎么更好更快的实行GC回收,和怎么构建高速的对象cace缓冲. 1 避免循环遍历的创建对象,哪怕对象很小,也是要占资源的. 2 ...

  10. 【mybatis】mybatis中避免where空条件后面添加1=1垃圾条件的 优化方法

    在mybatis中拼接查询语句,偶尔会出现where后面可能一个字段的值都没有,就导致所有条件无效,导致where没有存在的意义:但也有可能这些条件会存在.那解决这个问题的方法,最常见的就是: 在wh ...