ASP.NET MVC擴(kuò)展HtmlHelper方法
在上一篇文章的最后,列出了一些常見的HtmlHelper的方法,這些都是ASP.NET MVC已經(jīng)定義好的,如果我們想自己定義一個(gè)HtmlHelper方法可以嗎?答案是肯定的,那么如何自定義一個(gè)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的源碼中對(duì)Label()擴(kuò)展方法的定義,我們可以參考MVC中源碼定義擴(kuò)展方法的方式自定義一個(gè)擴(kuò)展方法。
下面以span標(biāo)簽為例進(jìn)行擴(kuò)展,擴(kuò)展方法定義如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcHtmlHelper.Helper { /// <summary> /// HTML的擴(kuò)展類 /// </summary> public static class HtmlHelperExt { /// <summary> /// 用C#代碼自定義一個(gè)span標(biāo)簽的擴(kuò)展方法 /// </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擴(kuò)展類中定義的 return builder.ToMvcHtmlString(TagRenderMode.Normal); } return MvcHtmlString.Empty; } } }
TagBuilderExtensions擴(kuò)展方法定義如下:
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)); } } }
視圖頁(yè)面代碼如下:
@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 rel="external nofollow" class="btn btn-primary btn-lg">Learn more »</a></p> <p> <!--使用自定義的Messager方法--> @Html.Messager("lblMessage", "lblMessage", "color:red;font-weight:bold;", "自定義span標(biāo)簽") </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" rel="external nofollow" >Learn more »</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" rel="external nofollow" >Learn more »</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" rel="external nofollow" >Learn more »</a></p> </div> </div>
運(yùn)行結(jié)果如下:
到此這篇關(guān)于ASP.NET MVC擴(kuò)展HtmlHelper方法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- MVC HtmlHelper擴(kuò)展類(PagingHelper)實(shí)現(xiàn)分頁(yè)功能
- 一步一步封裝自己的HtmlHelper組件BootstrapHelper(三)
- 一步一步封裝自己的HtmlHelper組件BootstrapHelper(二)
- C# 封裝HtmlHelper組件:BootstrapHelper
- ASP.NET MVC HtmlHelper如何擴(kuò)展
- ASP.NET MVC4 HtmlHelper擴(kuò)展類,實(shí)現(xiàn)分頁(yè)功能
- ASP.NET MVC中HtmlHelper控件7個(gè)大類中各個(gè)控件使用詳解
- asp.net 圖片驗(yàn)證碼的HtmlHelper
相關(guān)文章
運(yùn)用.net core中實(shí)例講解RabbitMQ
RabbitMQ是實(shí)現(xiàn)了高級(jí)消息隊(duì)列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件),本文詳細(xì)講解了RabbitMQ以及運(yùn)用.net core中實(shí)例講解其6中模式,感興趣的小伙伴一起來(lái)學(xué)習(xí)吧2021-09-09ASP.NET 定制簡(jiǎn)單的錯(cuò)誤處理頁(yè)面實(shí)現(xiàn)代碼
通常web應(yīng)用程序在發(fā)布后,為了給用戶一個(gè)友好界面和使用體驗(yàn),都會(huì)在錯(cuò)誤發(fā)生時(shí)跳轉(zhuǎn)至一個(gè)自定義的錯(cuò)誤頁(yè)面,而不是asp.net向用戶暴露出來(lái)的詳細(xì)的異常列表。2010-01-01Asp.net中通過(guò)Button打開另一個(gè)的frm
本文通過(guò)實(shí)例代碼給大家介紹了asp.net中通過(guò)button打開另一個(gè)frm的方法,非常不錯(cuò),需要的朋友參考下吧2016-12-12Asp.net SignalR 讓實(shí)時(shí)通訊變得如此簡(jiǎn)單
下面小編就為大家分享一篇Asp.net SignalR 讓實(shí)時(shí)通訊變得如此簡(jiǎn)單,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01.NET?6?跨服務(wù)器聯(lián)表查詢操作MySql、Oracle、SqlServer等相互聯(lián)表
這篇文章主要介紹了.NET?6?跨服務(wù)器聯(lián)表查詢,?MySql、Oracle、SqlServer等相互聯(lián)表,在這里給大家普及下什么是多庫(kù)架構(gòu)ORM就是說(shuō)一個(gè)對(duì)象可以同時(shí)操作和管理多個(gè)數(shù)據(jù)庫(kù) 我們稱為多庫(kù)架構(gòu),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10Entity?Framework?Core基于數(shù)據(jù)模型創(chuàng)建數(shù)據(jù)庫(kù)
這篇文章介紹了Entity?Framework?Core基于數(shù)據(jù)模型創(chuàng)建數(shù)據(jù)庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04MVC4制作網(wǎng)站教程第三章 修改用戶組操作3.3
這篇文章主要為大家詳細(xì)介紹了MVC4制作網(wǎng)站教程,修改用戶組功能的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08使用ASP.Net?WebAPI構(gòu)建REST服務(wù)
這篇文章介紹了使用ASP.Net?WebAPI構(gòu)建REST服務(wù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06