1、什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示:

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

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

  1. namespace System.Web.Mvc.Html
  2. {
  3. // Summary:
  4. // Represents support for HTML input controls in an application.
  5. public static class InputExtensions
  6. {
  7. public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name);
  8. }
  9. }

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

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

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

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

现在可以开始扩展了!

A、扩展img标签

  1. namespace System.Web.Mvc
  2. {
  3. public static class ImageExtensions
  4. {
  5. public static string Image(this HtmlHelper helper, string id, string url, string alternateText)
  6. {
  7. return Image(helper, id, url, alternateText, null);
  8. }
  9. public static string Image(this HtmlHelper helper, string id, string url, string alternateText, object htmlAttributes)
  10. {
  11. // 创建IMG标签
  12. var builder = new TagBuilder("img");
  13.  
  14. // 增加ID属性
  15. builder.GenerateId(id);
  16.  
  17. // 增加属性
  18. builder.MergeAttribute("src", url);
  19. builder.MergeAttribute("alt", alternateText);
  20. builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
  21.  
  22. // 输出完整的img标签
  23. return builder.ToString(TagRenderMode.SelfClosing);
  24. }
  25.  
  26. }
  27. }

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

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

B、扩展div标签

  1. namespace System.Web.Mvc
  2. {
  3. public static class DivExtensions
  4. {
  5. public static String Div(this HtmlHelper helper, String id, String content, String cssStyle, object htmlAttrs)
  6. {
  7. TagBuilder builder = new TagBuilder("div");
  8. //替换“.”为“_”
  9. builder.IdAttributeDotReplacement = "_";
  10. builder.GenerateId(id);
  11. builder.MergeAttributes(new RouteValueDictionary(htmlAttrs));
  12. builder.AddCssClass(cssStyle);
  13. builder.InnerHtml=content;
  14. return builder.ToString(TagRenderMode.Normal); //代表是双面标签
  15. }
  16. }
  17. }

调用:

@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标签

  1. namespace System.Web.Mvc
  2. {
  3. public static class SpanExtensions
  4. {
  5. public static string Span(this HtmlHelper helper, string id, string text, string css, object htmlAttributes)
  6. {
  7. //创意某一个Tag的TagBuilder
  8. var builder = new TagBuilder("span");
  9.  
  10. //创建Id,注意要先设置IdAttributeDotReplacement属性后再执行GenerateId方法.
  11. builder.IdAttributeDotReplacement = "-";
  12. builder.GenerateId(id);
  13.  
  14. //添加属性
  15. builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
  16.  
  17. //添加样式
  18. builder.AddCssClass(css);
  19. //或者用下面这句的形式也可以: builder.MergeAttribute("class", css);
  20.  
  21. //添加内容,以下两种方式均可
  22. //builder.InnerHtml = text;
  23. builder.SetInnerText(text);
  24.  
  25. //输出控件
  26. return builder.ToString(TagRenderMode.Normal);
  27.  
  28. }
  29. }
  30. }

调用:

@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标签

  1. namespace System.Web.Mvc
  2. {
  3. public static class UlLiExtensions
  4. {
  5. public static MvcHtmlString UlLi(this HtmlHelper helper, string[] listItems)
  6.  
  7. {
  8.  
  9. TagBuilder ulTag = new TagBuilder("ul");
  10.  
  11. foreach (string item in listItems)
  12.  
  13. {
  14.  
  15. TagBuilder liTag = new TagBuilder("li");
  16.  
  17. liTag.SetInnerText(item);
  18.  
  19. ulTag.InnerHtml += liTag.ToString();
  20.  
  21. }
  22.  
  23. return new MvcHtmlString(ulTag.ToString());
  24.  
  25. }
  26.  
  27. }
  28. }

调用:

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

输出:

  1. <ul>
  2. <li>上海</li>
  3. <li>深圳</li>
  4. <li>北京</li>
  5. <li>广州</li>
  6. </ul>

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

  1. namespace System.Web.Mvc
  2. {
  3. public static class CutStringExtensions
  4. {
  5. public static string CutString(this System.Web.Mvc.HtmlHelper helper, string content, int length)
  6. {
  7. if (content.Length > length)
  8. {
  9. return content.Substring(0, length) + "...";
  10. }
  11. else
  12. {
  13. return content;
  14. }
  15. }
  16.  
  17. }
  18. }

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

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

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

  2. ASP.NET MVC扩展之HtmlHelper辅助方法

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

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

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

  4. 《ASP.NET MVC高级编程(4版)》读书笔记(5)表单和HTML辅助方法

    5.1 表单使用 5.1.1 action 和 method 特性 <form action="/Home/Index">     <input name=&qu ...

  5. 表单和 HTML 辅助方法– ASP.NET MVC 4 系列

           这里有一个疑问,诸如在文本编辑器中输入 HTML 元素如此简单的任务,也需要任何帮助吗?的确,输入标签名称是很容易的事,但是确保 HTML 页面链接中的 URL 指向正确的位置.表单元素 ...

  6. 转:自定义ASP.NET MVC Html辅助方法

    在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...

  7. ASP.NET MVC 3 之表单和 HTML 辅助方法(摘抄)

    ——选自<ASP.NET MVC3 高级编程(第5章) 孙远帅 译> 第5章 表单和HTML辅助方法 本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 ...

  8. 【MVC】自定义ASP.NET MVC Html辅助方法

    在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...

  9. [转载]自定义ASP.NET MVC Html辅助方法 TagBuilder

    在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...

随机推荐

  1. 20180830xlVBA_合并计算

    Sub WorkbooksSheetsConsolidate() Rem 设置求和区域为 sheet名称/单元格区域;sheet名称/单元格区域 Const Setting As String = & ...

  2. p1468 Party Lamps

    就是模拟.同一个开关按2下相当于没按,那么,如果一共按0下,就是没按,按1下就是4个开关的1个,按2下可能相当于实际按了0下或按2下,按3下实际按了1下或3下,之后如果是奇数,相当于按1或3下,偶数相 ...

  3. 赵炯博士《Linux内核完全注释》

    赵炯:男,1963年10月5日出生,江苏苏州人,汉族. 同济大学机械工程学院机械电子教研室副教授,从事教学和科研工作. 现在主要为硕士和博士研究生开设<计算机通信技术>.<计算机控制 ...

  4. 2-sat学习笔记

    前后缀建图 例:要求n个变量满足至多有1个为true. 暴力:一个点的true向其它n-1个点的false连边,复杂度O(n^2). 正解:prei表示前i个点是否有真. prei的true向prei ...

  5. selenium 定时任务

  6. New task CodeForces - 788E (线段树优化dp)

    比较套路的一个题, 对每个数维护一颗线段树来转移就好了. #include <iostream> #include <algorithm> #include <cstdi ...

  7. python:字典嵌套列表

    Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...

  8. 重写nyoj2——括号匹配

    #include "bits/stdc++.h" using namespace std; int comp(char s1,char s2){ ; ; } int main() ...

  9. summer_19th,Nov 2018

    一.内存管理: Cpython解释器的垃圾回收机制 一个没有绑定任何变量名的值被称为垃圾,即该值的引用计数为零. 二.变量值的三个特点: id: 内存地址 type: 数据类型 值 总结:id相同,值 ...

  10. C++11 并发之std::thread std::mutex

    https://www.cnblogs.com/whlook/p/6573659.html (https://www.cnblogs.com/lidabo/p/7852033.html) C++:线程 ...