ASP.NET MVC扩展HtmlHelper方法

 更新时间:2022年03月08日 11:54:50   作者:.NET开发菜鸟  
这篇文章介绍了ASP.NET MVC扩展HtmlHelper的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

上一篇文章的最后,列出了一些常见的HtmlHelper的方法,这些都是ASP.NET MVC已经定义好的,如果我们想自己定义一个HtmlHelper方法可以吗?答案是肯定的,那么如何自定义一个HtmlHelper方法呢?

以Label()方法为例,查看Label方法的定义:

internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string labelText = null, IDictionary<string, object> htmlAttributes = null)
{
            string resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
            if (String.IsNullOrEmpty(resolvedLabelText))
            {
                return MvcHtmlString.Empty;
            }

            TagBuilder tag = new TagBuilder("label");
            tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
            tag.SetInnerText(resolvedLabelText);
            tag.MergeAttributes(htmlAttributes, replaceExisting: true);
            return tag.ToMvcHtmlString(TagRenderMode.Normal);
}

这是MVC的源码中对Label()扩展方法的定义,我们可以参考MVC中源码定义扩展方法的方式自定义一个扩展方法。

下面以span标签为例进行扩展,扩展方法定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcHtmlHelper.Helper
{
    /// <summary>
    /// HTML的扩展类
    /// </summary>
    public static class HtmlHelperExt
    {
        /// <summary>
        /// 用C#代码自定义一个span标签的扩展方法
        /// </summary>
        /// <param name="htlper"></param>
        /// <param name="id"></param>
        /// <param name="name"></param>
        /// <param name="style"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static MvcHtmlString Messager(this HtmlHelper htlper, string id,string name, string style, object message)
        {
            if (message != null)
            {
                TagBuilder builder = new TagBuilder("span");
                builder.MergeAttribute("style", style); //定义样式
                builder.MergeAttribute("id", id);     // 定义Id
                builder.MergeAttribute("name", name);  // 定义name
                builder.SetInnerText(message.ToString());
                //ToMvcHtmlString是在TagBuilderExtensions扩展类中定义的
                return builder.ToMvcHtmlString(TagRenderMode.Normal);
            }
            return MvcHtmlString.Empty;
        }
    }
}

TagBuilderExtensions扩展方法定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcHtmlHelper.Helper
{
    public static class TagBuilderExtensions
    {
        public static MvcHtmlString ToMvcHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode)
        {
            System.Diagnostics.Debug.Assert(tagBuilder != null);
            return new MvcHtmlString(tagBuilder.ToString(renderMode));
        }
    }
}

 视图页面代码如下:

@using MvcHtmlHelper.Helper;
@{
    ViewBag.Title = "Home Page";
}

<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
    <p><a href="https://asp.net" rel="external nofollow"  class="btn btn-primary btn-lg">Learn more &raquo;</a></p>
    <p>
        <!--使用自定义的Messager方法-->
        @Html.Messager("lblMessage", "lblMessage", "color:red;font-weight:bold;", "自定义span标签")
    </p>
</div>

<div class="row">
    <div class="col-md-4">
        <h2>Getting started</h2>
        <p>
            ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that
            enables a clean separation of concerns and gives you full control over markup
            for enjoyable, agile development.
        </p>
        <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301865" rel="external nofollow" >Learn more &raquo;</a></p>
    </div>
    <div class="col-md-4">
        <h2>Get more libraries</h2>
        <p>NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.</p>
        <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301866" rel="external nofollow" >Learn more &raquo;</a></p>
    </div>
    <div class="col-md-4">
        <h2>Web Hosting</h2>
        <p>You can easily find a web hosting company that offers the right mix of features and price for your applications.</p>
        <p><a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkId=301867" rel="external nofollow" >Learn more &raquo;</a></p>
    </div>
</div>

运行结果如下:

到此这篇关于ASP.NET MVC扩展HtmlHelper方法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 实例讲解.NET中资源文件的创建与使用

    实例讲解.NET中资源文件的创建与使用

    资源文件顾名思义就是存放资源的文件。资源文件在程序设计中有着自身独特的优势,他独立于源程序,这样资源文件就可以被多个程序使用
    2011-12-12
  • .NET 6实现滑动验证码的示例详解

    .NET 6实现滑动验证码的示例详解

    这篇文章主要为大家详细介绍了如何利用.NET 6实现滑动验证码,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2022-11-11
  • asp.net中GridView编辑,更新,合计用法示例

    asp.net中GridView编辑,更新,合计用法示例

    这篇文章主要介绍了asp.net中GridView编辑,更新,合计用法,结合实例形式分析了asp.net中GridView常见的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • C# 有关Assembly.Unload详解

    C# 有关Assembly.Unload详解

    这篇文章主要介绍了C# 有关Assembly.Unload详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 一步步打造简单的MVC电商网站BooksStore(3)

    一步步打造简单的MVC电商网站BooksStore(3)

    这篇文章主要和大家一起一步步打造一个简单的MVC电商网站,MVC电商网站BooksStore第三篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • asp.net 图片验证码的HtmlHelper

    asp.net 图片验证码的HtmlHelper

    一个图片验证码的HtmlHelper,原来的调用代码如下,需要的朋友可以参考下
    2012-05-05
  • .Net之微信小程序获取用户UnionID的实现

    .Net之微信小程序获取用户UnionID的实现

    这篇文章主要介绍了.Net之微信小程序获取用户UnionID的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 获取pc电脑和平板物理地址

    获取pc电脑和平板物理地址

    这篇文章主要介绍了如何获取pc电脑和平板物理地址,需要的朋友可以参考下
    2014-03-03
  • asp.net部署到IIS常见问题的解决方法

    asp.net部署到IIS常见问题的解决方法

    这篇文章主要为大家详细介绍了asp.net部署到IIS常见问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Asp.Net中的字符串和HTML十进制编码转换实现代码

    Asp.Net中的字符串和HTML十进制编码转换实现代码

    这篇文章主要介绍了Asp.Net中的字符串和HTML十进制编码转换实现代码,本文一并列出了javascript语言的实现方法,用以实现字符串和HTML十进制编码之间互相转换功能,需要的朋友可以参考下
    2014-08-08

最新评论