转:ASP.NET 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(, length) + "...";
}
else
{
return content;
}
} }
}
此处只是抛砖引玉,更多的用法要根据实际需求来进行开发~
转:ASP.NET MVC扩展之HtmlHelper辅助方法的更多相关文章
- ASP.NET MVC扩展之HtmlHelper辅助方法
什么是HtmlHelper辅助方法? 其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class Fo ...
- MVC扩展之HtmlHelper辅助方法
1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...
- ASP.NET MVC扩展库
很多同学都读过这篇文章吧 ASP.NET MVC中你必须知道的13个扩展点,今天给大家介绍一个ASP.NET MVC的扩展库,主要就是针对这些扩展点进行.这个项目的核心是IOC容器,包括Ninject ...
- MVC学习系列4--@helper辅助方法和用户自定义HTML方法
在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...
- 在Asp.Net MVC中用Ajax回调后台方法
在Asp.Net MVC中用Ajax回调后台方法基本格式: var operData = ...; //传递的参数(action中定义的) var type = ...; //传递的参数(action ...
- ASP.NET MVC 应用提速的十种方法
[编者按]本文作者为 DZone 社区的最具价值博主(MVB) Jonathan Danylko,主要介绍为 ASP.NET MVC 应用提速的十种方法.由国内 ITOM 管理平台 OneAPM 编译 ...
- ASP.NET MVC ETag & Cache等优化方法
背景 最近有一个项目是用SmartAdmin + Jquery + EasyUI 一个ASP.NET MVC5的项目,一直存在一个性能问题,加载速度比较慢,第一次加载需要(在没有cache的情况下)需 ...
- ASP.net MVC 文件下载的几种方法
ASP.net MVC 文件下载的几种方法(欢迎讨论) 在ASP.net MVC 中有几种下载文件的方法前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不 ...
- 17+个ASP.NET MVC扩展点【附源码】
1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig. 在自定义的Http ...
随机推荐
- C# params参数的应用
为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示: public static Int32Add(params Int32[] values) { Int ...
- 胜利大逃亡[HDU1253]
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- BZOJ4134 : ljw和lzr的hack比赛
设$f[x]$为$x$子树里的子游戏的sg值,$h[x]$为$x$所有儿子节点$f[x]$的异或和,则: $f[x]=mex(y到x路径上所有点的h的异或和\ xor\ y到x路径上所有点的f的异或和 ...
- NOI2012 : 迷失游乐园
终于补完NOI2012了好开心~ 题目大意:给定一棵树或者环套外向树,求出从中随机选一条简单路径的期望长度,环上点数不超过20. 设 d[x]表示x的度数,ch[x]表示x孩子个数 up[x]表示x向 ...
- 使用CSS修改HTML5 input placeholder颜色
HTML <input type="text" placeholder="Value" /> 有三种实现方式:伪元素(pseudo-elements ...
- ccc2016
连炸两题,身败名裂. 看来不拍暴力就会die. A题 滑动窗口或什么前缀和二分之类的就行了. #include<cstdio> #include<cstring> #inclu ...
- OI优化开关
#pragma comment(linker,"/STACK:10240000,10240000")#pragma GCC optimize ("O2")
- javascript第三弹——数组
什么是数组 数组是值的有序集合.每个值叫做元素,每个元素在数组中都有数字位置编号,也就是索引.JS中的数组是弱类型的,数组中可以含有不同类型的元素.数组元素甚至可以是对象或其它数组.数组的长度是动态的 ...
- HTML中为何P标签内不可包含DIV标签?
起因:在做项目时发现原本在DW中无误的代码到了MyEclipse6.0里面却提示N多错误,甚是诧异.于是究其原因,发现块级元素P内是不能嵌套DIV的. 深究:我们先来认识in-line内联元素和blo ...
- linux 2.6.37-3.x.x x86_64
/* * linux 2.6.37-3.x.x x86_64, ~100 LOC * gcc-4.6 -O2 semtex.c && ./a.out * 2010 sd@fuckshe ...