亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET MVC @Helper輔助方法和@functons自定義函數的使用方法

2024-07-10 13:30:06
字體:
來源:轉載
供稿:網友
本文主要介紹ASP.NET MVC中使用@Helper和@functons自定義一些代碼片段,方便視圖調用,從而達到減少重復代碼,快速開發的目的,希望對大家有所幫助。
 

ASP.NET Razor 視圖具有.cshtml后綴,可以輕松的實現c#代碼和html標簽的切換,大大提升了我們的開發效率。但是Razor語法還是有一些棉花糖值得我們了解一下,可以更加強勁的提升我們的開發效率,減少開發bug的出現。

Razor 采用的是@尾巴符號,正是這個符號成就了MVC開發效率的提升。下面了解一下和@相關的兩個可以重用的helper、functions。

作為現代化的程序員,我們盡可能的遵守一個原則.不要重復你自己。所以能夠重構的代碼我們都會合并,但是這是對于后臺代碼C#來說的,對于在View層 也可以進行一些簡單的業務邏輯,當然View層可以進行復雜的業務邏輯判斷,但是前輩說復雜的業務邏輯是Model或Controller的工作,View層的任務就是展示,業務邏輯應當是越少越好。

在View層進行的一些重構有哪些呢?其中一個就是@helper  自定義片段。

比如說我們要輸出一個數字,如果為0的話就輸出不存在,如果為其他數字就輸出存在,當然這個在強大的Razor語法下很容易的就可以搞定。

@(ViewBag.IsEnabled == "0" ? "不存在" : "存在")

但是如果當前頁面有很多這樣的相同邏輯的判斷會怎么樣呢?聰明的程序員肯定知道不能重復你自己的原則,所以我們就要進行重構,但是在View層怎么進行重構呢?使用@helper可以解決這個問題。

@helper Show(int count){  if (count == 0)  {    @:存在  }  else  {    @:不存在  }}@(ViewBag.IsEnabled == 0 ? "不存在" : "存在")@Show(0)    @*調用helper*@

這樣我們在當前頁面多個位置進行調用來輸出,如果要修改可以修改一部分,而不至于全部都要修改。

還有就要說了,我要在其他頁面也使用這個helper怎么辦呢?當然辦法還是有的,在app_code文件夾下添加一個視圖文件(假定為UIHelper.cshtml),將helper代碼復制,然后在需要調用的View頁面通過@UIHelper.Show(0)  來調用。因為app_code文件夾下的文件最終會被編譯成類。

總結:我們總結一下要實現根據不同情況進行輸出有多少種實現方式,當然我能想到的不會完全。

1.通過helper進行全局的設置,讓所有需要判斷的頁面都調用這個helper方法。
2.在后臺代碼判斷,然后輸出到前臺View。
3.通過Html.Action()或Html.Partial()來獲取,當然如果簡單的還是采用helper,復雜的可以采用這種方式。
4.通過自定義函數Functions來實現。

自定義函數@functions  ,自定義函數式采用c#的語法來實現的代碼復用,只不過這個函數可以將html標簽輸出到頁面。

//自定義函數@functions@functions{  public IHtmlString Get(int count)  {    string result = "";    if (count == 0)    {      result = "不存在";    }    else    {      result = "存在";    }    return new HtmlString(result);  }}@Get(0)  //調用的自定義函數

 

請注意,@functions 對應的是Razor的代碼段,需要添加{},并且functions內部是正規的c#方法。

如果要在多個頁面同時使用這個functions,可以將這個方法移植到app_code中,假定文件名為UIHelper.cshtml。并且里面的方法必須定義為靜態的。這個很好理解,UIHelper相當于類名,而其中的functions就相當于方法,如果要通過類名.方法名來進行調用,則必須將方法定義成靜態的。

UIHelper.cshtml文件代碼

@helper ShowUnit(int count){  if (count == 0)  {    @:免費    }  else  {    @count  }}@functions {  public static IHtmlString Check(int count)  {    string result = "";    if (count == 0)    {      result = "fsdfsdfsdfd";    }    else    {      result = count.ToString();    }    return new HtmlString(result);  }}//自定義函數@functions@functions{  public static IHtmlString Get(int count)  {    string result = "";    if (count == 0)    {      result = "不存在";    }    else    {      result = "存在";    }    return new HtmlString(result);  }}

總結:helper針對的是直接輸出html內容并且具有簡單的邏輯的情況,并且helper沒有任何返回值,而functions自定義函數則要強大很多,如果functions需要返回html內容,那么返回值是IHtmlString類型,如果不需要返回值,則可以設置為void,但是如果沒有返回值也就失去了定義function的意義,所以一般返回值均為IHtmlString。對于View層的重構,我們可以采用helper和自定義函數functions的方式來實現。

補充:當在頁面中引入新類型的時候,可能命名空間很長,導致頁面間好多重復代碼,可以在view頁面的開始位置導入命名空間,

如下:@model IEnumrable<MVC.Test.Animal>可以改為

@using MVC.Test

@model IEnumrable<Animal>;

當所有view頁面都會引入相同的命名空間的時候,可以采取一種方式避免每個頁面都要用@using來引入,在Views目錄下有web.config文檔,可以在此文檔下的

<system.web.webPages.razor>區段加入每個頁面都會用到的命名空間,如下:

<system.web.webPages.razor>  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />  <pages pageBaseType="System.Web.Mvc.WebViewPage">   <namespaces>    <add namespace="System.Web.Mvc" />    <add namespace="System.Web.Mvc.Ajax" />    <add namespace="System.Web.Mvc.Html" />    <add namespace="System.Web.Optimization"/>    <add namespace="System.Web.Routing" />    <add namespace="WebApplication1" />   </namespaces>  </pages></system.web.webPages.razor>


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久色精品视频| 国产91在线高潮白浆在线观看| 日韩精品中文字幕久久臀| 欧美大片免费观看| 88国产精品欧美一区二区三区| 91九色国产社区在线观看| 国产成人激情视频| 亚洲精品国产精品自产a区红杏吧| 成人福利网站在线观看| 国产精品入口日韩视频大尺度| 欧美日韩国产一区中文午夜| 欧美第一黄网免费网站| 成人h视频在线观看播放| 日韩女优在线播放| 青青在线视频一区二区三区| 欧美专区中文字幕| 蜜臀久久99精品久久久无需会员| 国产精品aaa| 中文在线资源观看视频网站免费不卡| 性欧美暴力猛交69hd| 国产精品一区二区久久国产| www.久久撸.com| 久久91精品国产91久久久| 欧美成人精品h版在线观看| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品av在线播放| 亚洲毛片在线免费观看| 亚洲色图15p| 在线观看日韩视频| 日韩av手机在线观看| 精品久久久久国产| 亚洲免费电影一区| 久久精品成人欧美大片古装| 北条麻妃在线一区二区| 欧美在线视频网站| 欧美黄色性视频| 粗暴蹂躏中文一区二区三区| 日韩av在线资源| 成人免费观看网址| 日韩av网站导航| 成人妇女淫片aaaa视频| 亚洲aa在线观看| 精品国产区一区二区三区在线观看| 国产精品成久久久久三级| 久久99青青精品免费观看| 日韩视频中文字幕| 精品露脸国产偷人在视频| 欧美大人香蕉在线| 91精品视频大全| 亚洲女人天堂色在线7777| 日韩欧美有码在线| 亚洲欧美日韩网| 美女国内精品自产拍在线播放| 伊是香蕉大人久久| 色爱精品视频一区| 在线看欧美日韩| 亚洲天堂精品在线| 久久久国产视频| 91高潮精品免费porn| 欧美亚洲日本网站| 91香蕉亚洲精品| 欧美日韩美女视频| 91天堂在线观看| 欧美性猛交xxxx| 日韩中文字幕在线精品| 欧美在线视频免费播放| 2018中文字幕一区二区三区| 国产精品久久久久久网站| 亚洲美女精品成人在线视频| 成人乱色短篇合集| 亚洲电影免费观看高清完整版在线观看| 性金发美女69hd大尺寸| 久久亚洲综合国产精品99麻豆精品福利| 日韩av第一页| 亚洲a一级视频| 精品亚洲一区二区| 国产精品网红直播| 精品无人国产偷自产在线| 亚洲人线精品午夜| 久久夜色精品国产亚洲aⅴ| 97精品视频在线观看| 一区二区欧美在线| 日韩三级影视基地| 亚洲二区中文字幕| 国产精品大片wwwwww| 91在线观看免费| 奇米影视亚洲狠狠色| 国产精品毛片a∨一区二区三区|国| 成人久久久久久久| 亚洲综合在线小说| 精品国产户外野外| 一区二区三区亚洲| 国产视频精品va久久久久久| 国产成人精品综合久久久| 午夜剧场成人观在线视频免费观看| www.日韩.com| 国产丝袜一区二区| 日本国产精品视频| 日韩在线观看免费高清完整版| 久久国产精品久久久久| 欧美成人黑人xx视频免费观看| 中文字幕亚洲综合久久筱田步美| 668精品在线视频| 国产91|九色| 日韩精品免费一线在线观看| 久久天天躁狠狠躁夜夜躁| 日韩中文字在线| 在线播放日韩av| 久久久久亚洲精品| 国产美女精品视频免费观看| 久久精品99久久久久久久久| 国产精品一二三在线| 日韩电视剧免费观看网站| 久久久久久亚洲精品中文字幕| 日韩中文在线中文网三级| 精品中文字幕久久久久久| 欧美极品第一页| 亚洲夜晚福利在线观看| 亚洲激情视频在线播放| 国产精品美女www| 在线视频中文亚洲| 国产91精品最新在线播放| 最新69国产成人精品视频免费| 成人黄色免费网站在线观看| 成人免费高清完整版在线观看| 亚洲欧美资源在线| 日韩一区二区三区xxxx| 97超级碰碰碰久久久| 中文字幕在线看视频国产欧美在线看完整| 最近2019免费中文字幕视频三| 精品中文视频在线| 欧美日韩性生活视频| 亚洲精品小视频在线观看| 国产精品一区专区欧美日韩| 97超级碰碰人国产在线观看| 日韩欧美国产中文字幕| 国产精品永久在线| 亚洲春色另类小说| 夜夜嗨av一区二区三区四区| 日韩精品视频观看| 欧美精品久久久久a| 久久久久久久色| 国产婷婷97碰碰久久人人蜜臀| 日韩av电影在线免费播放| 久国内精品在线| 国产欧美中文字幕| 亚洲综合在线做性| 在线播放国产一区二区三区| 日韩的一区二区| 国产欧美日韩精品丝袜高跟鞋| 欧美亚洲免费电影| 欧洲亚洲免费在线| 国产aaa精品| 日韩女优人人人人射在线视频| 成人免费高清完整版在线观看| 日韩电影中文 亚洲精品乱码| 日韩免费在线观看视频| 亚洲精品成人网| 国产日韩精品入口| 国产精品444| 欧美激情二区三区| 91国自产精品中文字幕亚洲| 日韩av一区在线观看| 日韩理论片久久|