MVC扩展之HtmlHelper辅助方法
1、什么是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);
- }
- }
2、通过对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;
- }
- }
- }
- }
MVC扩展之HtmlHelper辅助方法的更多相关文章
- 转:ASP.NET MVC扩展之HtmlHelper辅助方法
1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...
- ASP.NET MVC扩展之HtmlHelper辅助方法
什么是HtmlHelper辅助方法? 其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class Fo ...
- MVC学习系列4--@helper辅助方法和用户自定义HTML方法
在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...
- 《ASP.NET MVC高级编程(4版)》读书笔记(5)表单和HTML辅助方法
5.1 表单使用 5.1.1 action 和 method 特性 <form action="/Home/Index"> <input name=&qu ...
- 表单和 HTML 辅助方法– ASP.NET MVC 4 系列
这里有一个疑问,诸如在文本编辑器中输入 HTML 元素如此简单的任务,也需要任何帮助吗?的确,输入标签名称是很容易的事,但是确保 HTML 页面链接中的 URL 指向正确的位置.表单元素 ...
- 转:自定义ASP.NET MVC Html辅助方法
在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...
- ASP.NET MVC 3 之表单和 HTML 辅助方法(摘抄)
——选自<ASP.NET MVC3 高级编程(第5章) 孙远帅 译> 第5章 表单和HTML辅助方法 本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 ...
- 【MVC】自定义ASP.NET MVC Html辅助方法
在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...
- [转载]自定义ASP.NET MVC Html辅助方法 TagBuilder
在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...
随机推荐
- 20180830xlVBA_合并计算
Sub WorkbooksSheetsConsolidate() Rem 设置求和区域为 sheet名称/单元格区域;sheet名称/单元格区域 Const Setting As String = & ...
- p1468 Party Lamps
就是模拟.同一个开关按2下相当于没按,那么,如果一共按0下,就是没按,按1下就是4个开关的1个,按2下可能相当于实际按了0下或按2下,按3下实际按了1下或3下,之后如果是奇数,相当于按1或3下,偶数相 ...
- 赵炯博士《Linux内核完全注释》
赵炯:男,1963年10月5日出生,江苏苏州人,汉族. 同济大学机械工程学院机械电子教研室副教授,从事教学和科研工作. 现在主要为硕士和博士研究生开设<计算机通信技术>.<计算机控制 ...
- 2-sat学习笔记
前后缀建图 例:要求n个变量满足至多有1个为true. 暴力:一个点的true向其它n-1个点的false连边,复杂度O(n^2). 正解:prei表示前i个点是否有真. prei的true向prei ...
- selenium 定时任务
- New task CodeForces - 788E (线段树优化dp)
比较套路的一个题, 对每个数维护一颗线段树来转移就好了. #include <iostream> #include <algorithm> #include <cstdi ...
- python:字典嵌套列表
Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...
- 重写nyoj2——括号匹配
#include "bits/stdc++.h" using namespace std; int comp(char s1,char s2){ ; ; } int main() ...
- summer_19th,Nov 2018
一.内存管理: Cpython解释器的垃圾回收机制 一个没有绑定任何变量名的值被称为垃圾,即该值的引用计数为零. 二.变量值的三个特点: id: 内存地址 type: 数据类型 值 总结:id相同,值 ...
- C++11 并发之std::thread std::mutex
https://www.cnblogs.com/whlook/p/6573659.html (https://www.cnblogs.com/lidabo/p/7852033.html) C++:线程 ...