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


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         else
11         {
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         @count
10     }
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         else
22         {
23             result = count.ToString();
24         }
25         return new HtmlString(result);
26     }
27 }
28 //自定義函數@functions
29 @functions{
30     public static IHtmlString Get(int count)
31     {
32         string result = "";
33         if (count == 0)
34         {
35             result = "不存在";
36         }
37         else
38         {
39             result = "存在";
40         }
41         return new HtmlString(result);
42     }
43 }

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM