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 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
{
    /// 
    /// HTML的扩展类
    /// 
    public static class HtmlHelperExt
    {
        /// 
        /// 用C#代码自定义一个span标签的扩展方法
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        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";
}

ASP.NET

ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.

Learn more »

@Html.Messager("lblMessage", "lblMessage", "color:red;font-weight:bold;", "自定义span标签")

Getting started

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.

Learn more »

Get more libraries

NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.

Learn more »

Web Hosting

You can easily find a web hosting company that offers the right mix of features and price for your applications.

Learn more »

运行结果如下:

ASP.NET MVC扩展HtmlHelper方法_第1张图片

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

你可能感兴趣的:(ASP.NET MVC扩展HtmlHelper方法)