MVC扩展之HtmlHelper辅助方法

本文介绍了如何通过扩展HtmlHelper类来自定义HTML辅助方法,包括创建img、div、span标签及ul列表等,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;    }   }  } }

转载于:https://www.cnblogs.com/sky-net/p/5392402.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值