asp.net MVC helper 和自訂函數@functions小結

來源:互聯網
上載者:User

標籤:style   blog   color   使用   os   io   檔案   ar   

asp.net Razor 視圖具有.cshtml尾碼,可以輕鬆的實現c#代碼和html標籤的切換,大大提升了我們的開發效率。但是Razor文法還是有一些棉花糖值得我們瞭解一下,可以更加強勁的提升我們的開發效率,減少開發bug的出現。

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

 

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

 

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

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

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

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

 1 @helper Show(int count) 2 { 3     if (count == 0) 4     { 5         @:存在 6     } 7     else 8     { 9         @:不存在10     }11 }12 13 @(ViewBag.IsEnabled == 0 ? "不存在" : "存在")14 @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標籤輸出到頁面。

 1 //自訂函數@functions 2 @functions{ 3     public IHtmlString Get(int count) 4     { 5         string result = ""; 6         if (count == 0) 7         { 8             result = "不存在"; 9         }10         else11         {12             result = "存在";13         }14         return new HtmlString(result);15     }16 }17 18 19 @Get(0)   //調用的自訂函數

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

 

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

UIHelper.cshtml檔案代碼

 1 @helper ShowUnit(int count) 2 { 3     if (count == 0) 4     { 5         @:免費 6         } 7     else 8     { 9         @count10     }11 }12 13 @functions {14     public static IHtmlString Check(int count)15     {16         string result = "";17         if (count == 0)18         {19             result = "fsdfsdfsdfd";20         }21         else22         {23             result = count.ToString();24         }25         return new HtmlString(result);26     }27 }28 //自訂函數@functions29 @functions{30     public static IHtmlString Get(int count)31     {32         string result = "";33         if (count == 0)34         {35             result = "不存在";36         }37         else38         {39             result = "存在";40         }41         return new HtmlString(result);42     }43 }

 

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.