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辅助方法

时间: 2024-10-27 14:12:12

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

扩展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

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

在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么,我们就可以通过自己定义一个Html扩展方法来达到这个目的. 比如,到目前为止,Html扩展方法中没有关于<input type="file" />这类标签的辅助方法,那么我们就可以自已实现一个.本文以实现<input type="file" />

(转)表单和HTML辅助方法 - ASP.NET MVC 3

——选自<ASP.NET MVC3 高级编程(第5章)  孙远帅 译> ——微软ASP.NET MVC系列书籍地址: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-3.productCd-1118076583.html 第5章 表单和HTML辅助方法  本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 * 显示和渲染的辅助方法 顾名思义,HTML辅助方法是用来辅助HTML开发的

Asp.net MVC4高级编程学习笔记-模型学习第五课MVC表单和HTML辅助方法20171101

MVC表单和HTML辅助方法 一.表单的使用. 表单中的action与method特性.Action表示表单要提交往那里,因此这里就有一个URL.这个URL可以是相对或绝对地址.表单默认的method属性值是get,如果看到表单没有写method属性那就是表示method是get方式提交.另外一种就是post方式. 当使用HTTP Get请求时,浏览器会提取表单中元素的name特性值及相应的value特性值放到查询字符串中.如:http://localhost?search?id=1 如果不想把

ASP.NET MVC3学习心得-----表单和HTML辅助方法

5.1表单的使用 5.1.1  action和method的特性 表单是包含输入元素的容器,包含按钮.复选框.文本框等元素,表单的这些输入元素使得用户能够向页面中输入信息,并把输入信息提交给服务器.Action特性告知浏览器将URL提交到哪里,method特性来说明用何种方式告知浏览器,默认为get方法 5.1.2Get和Post方法 1.如果不想让浏览器把输入值放入查询字符串中,而是想放入HTTP请求的主体中,可以为method赋值post,post可以用来提交信用卡信息.向购物车添加专辑或者

asp.net mvc 3.0 知识点整理 ----- (4).HtmlHelper(Html 辅助方法)介绍

在View视图中,Html的类型是System.Web.Mvc.HtmlHelper<T>, 所有的辅助方法都需要和ModelState交互.那么,ModelState是什么呢?它是模型绑定的附属品,并且存有模型绑定期间检测到的所有验证错误.以及用户提交用到来更新模型的原始值.本篇博文,我们主要来介绍下一些常用的html辅助方法的主要作用和使用方法. 1. Html.BeginForm()和Ajax.BeginForm().   Html.BeginForm(): 同于传统的表单提交,主要是生

MVC4.0 扩展辅助方法

新年第一天上班,写个博客开头吧! 在MVC中,辅助类是很常见的,比如说,Html.TextBox().Html.DropDownListFor()等,这些都是微软帮我们封装好的,可以直接调用的,它们解析出来的结果都是一段Html代码,而实际项目中,我们可能需要自己去扩展一些我们需要的辅助类,比如说下面这段代码: @UserHelpers.UserMsg(this.Html, ViewBag.Msg, ViewBag.MsgType),它的作用是用于系统消息提示. 我们转到它的定义看看: 1 pu

MVC学习系列[email&#160;protected]辅助方法和用户自定义HTML方法

在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类,分成三个类型: Inline HTML helpers[内联的HTML帮助类,例如@Html.Label等] Built-in HTML helpers[也就是嵌套的HTML帮助类,即@helper辅助方法] Custom HTML helpers[自定义的HTML帮助类] 在这里,我们学习第二种,

004.MVC视图、辅助方法

一.视图基础- 视图定义: 用户界面,是显示应用程序用户界面(UI)组件 Web应用程序:页面 作用: 1.输出/显示模型数据 2.出入提交 视图建议在View文件夹位置存储视图 视图引擎(了解):本意发动机,这里指的是:处理视图的软件(框架内部) ASP.NET Web窗体提供了一种视图引擎,称为Web窗体引擎 ASP.NET MVC1及MVC2版本中支持Web窗体引擎 ASP.NET MVC3版本除了支持Web窗体引擎,还提供了一种新的视图引擎,称为Razor(视图)引擎 Razor引擎更加