运维开发网

NETMVC扩展HtmlHelper方法

运维开发网 https://www.qedev.com 2022-08-03 17:34 出处:网络
这篇文章介绍了ASP.NETMVC扩展HtmlHelper的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

这篇文章介绍了ASP.NETMVC扩展HtmlHelper的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

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

internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string labelText = null, IDictionarylt;string, objectgt; 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{ /// lt;summarygt; /// HTML的扩展类 /// lt;/summarygt; public static class HtmlHelperExt { /// lt;summarygt; /// 用C#代码自定义一个span标签的扩展方法 /// lt;/summarygt; /// lt;param name="htlper"gt;lt;/paramgt; /// lt;param name="id"gt;lt;/paramgt; /// lt;param name="name"gt;lt;/paramgt; /// lt;param name="style"gt;lt;/paramgt; /// lt;param name="message"gt;lt;/paramgt; /// lt;returnsgt;lt;/returnsgt; 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";}lt;div class="jumbotron"gt; lt;h1gt;ASP.NETlt;/h1gt; lt;p class="lead"gt;ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.lt;/pgt; lt;pgt;lt;a href="https://asp.net" rel="external nofollow" class="btn btn-primary btn-lg"gt;Learn more amp;raquo;lt;/agt;lt;/pgt; lt;pgt; lt;!--使用自定义的Messager方法--gt; @Html.Messager("lblMessage", "lblMessage", "color:red;font-weight:bold;", "自定义span标签") lt;/pgt;lt;/divgt;lt;div class="row"gt; lt;div class="col-md-4"gt; lt;h2gt;Getting startedlt;/h2gt; lt;pgt; 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. lt;/pgt; lt;pgt;lt;a class="btn btn-default" href="https://go.microsoft.com/fwlink/LinkId=301865" rel="external nofollow" gt;Learn more amp;raquo;lt;/agt;lt;/pgt; lt;/divgt; lt;div class="col-md-4"gt; lt;h2gt;Get more librarieslt;/h2gt; lt;pgt;NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects.lt;/pgt; lt;pgt;lt;a class="btn btn-default" href="https://go.microsoft.com/fwlink/LinkId=301866" rel="external nofollow" gt;Learn more amp;raquo;lt;/agt;lt;/pgt; lt;/divgt; lt;div class="col-md-4"gt; lt;h2gt;Web Hostinglt;/h2gt; lt;pgt;You can easily find a web hosting company that offers the right mix of features and price for your applications.lt;/pgt; lt;pgt;lt;a class="btn btn-default" href="https://go.microsoft.com/fwlink/LinkId=301867" rel="external nofollow" gt;Learn more amp;raquo;lt;/agt;lt;/pgt; lt;/divgt;lt;/divgt;

运行结果如下:


就是这样。这篇关于ASP.NET MVC扩展HtmlHelper方法的文章已经介绍到这里了。希望对大家的学习有所帮助

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号