欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年04月06日 10:07:22   作者:baidixing  
本文主要介紹ASP.NET MVC中使用@Helper和@functons自定義一些代碼片段,方便視圖調(diào)用,從而達到減少重復(fù)代碼,快速開發(fā)的目的,希望對大家有所幫助。

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

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

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

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

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

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

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

@helper Show(int count)
{
  if (count == 0)
  {
    @:存在
  }
  else
  {
    @:不存在
  }
}

@(ViewBag.IsEnabled == 0 ? "不存在" : "存在")
@Show(0)    @*調(diào)用helper*@

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

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

總結(jié):我們總結(jié)一下要實現(xiàn)根據(jù)不同情況進行輸出有多少種實現(xiàn)方式,當(dāng)然我能想到的不會完全。

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

自定義函數(shù)@functions  ,自定義函數(shù)式采用c#的語法來實現(xiàn)的代碼復(fù)用,只不過這個函數(shù)可以將html標(biāo)簽輸出到頁面。

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


@Get(0)  //調(diào)用的自定義函數(shù)

請注意,@functions 對應(yīng)的是Razor的代碼段,需要添加{},并且functions內(nèi)部是正規(guī)的c#方法。

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

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);
  }
}
//自定義函數(shù)@functions
@functions{
  public static IHtmlString Get(int count)
  {
    string result = "";
    if (count == 0)
    {
      result = "不存在";
    }
    else
    {
      result = "存在";
    }
    return new HtmlString(result);
  }
}

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

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

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

@using MVC.Test

@model IEnumrable<Animal>;

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

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

<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>

相關(guān)文章

  • IIS中ASP.NET連接SQL Server出錯的解決方法

    IIS中ASP.NET連接SQL Server出錯的解決方法

    在IIS中運行的ASP.NET應(yīng)用程序其所屬用戶名為ASPNET的特定用戶,其默認權(quán)限是無法訪問SQL Server的,更不可能訪問ASP.NET應(yīng)用程序的數(shù)據(jù)庫了,因此要在IIS中訪問SQL Server就需要給ASPNET帳戶賦予相應(yīng)的權(quán)限.
    2010-03-03
  • asp.net 使用ObjectDataSource控件在ASP.NET中實現(xiàn)Ajax真分頁

    asp.net 使用ObjectDataSource控件在ASP.NET中實現(xiàn)Ajax真分頁

    ASP.NET 3.5中新增加的ListView控件是一個用于頁面數(shù)據(jù)綁定和界面布局的非常棒的控件,它在ASP.NET 2.0 GridView的基礎(chǔ)上做了很多改進,用戶在使用時可以控制的元素更多,開發(fā)時的靈活性更大了,個人覺得ListView在使用時比DataGrid和GirdView更加順手。
    2009-11-11
  • VS2017調(diào)用MySQL 8.0的方法

    VS2017調(diào)用MySQL 8.0的方法

    這篇文章主要為大家詳細介紹了VS2017調(diào)用MySQL 8.0的方法,附上C++程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C#中實現(xiàn)偽靜態(tài)頁面兩種方式介紹

    C#中實現(xiàn)偽靜態(tài)頁面兩種方式介紹

    偽靜態(tài)技術(shù)的誕生,帶動了于搜索引擎友好C#中實現(xiàn)偽靜態(tài)頁面有兩種方式,本文將一一詳解,感興趣的朋友可以參考下,希望本文對你學(xué)習(xí)偽靜態(tài)有所幫助
    2013-01-01
  • asp.net request.PathInfo實現(xiàn)的url重寫

    asp.net request.PathInfo實現(xiàn)的url重寫

    最近對在開始研究url重寫,對重寫的原理以及重寫之后引起的性能問題是研究的重點,研究過程中發(fā)現(xiàn)了一種輕便的“url重寫方案”
    2009-04-04
  • C# 給站點指定位置的某種格式的圖片添加水印

    C# 給站點指定位置的某種格式的圖片添加水印

    可以給站點指定位置的某種格式的圖片添加水印的c#實現(xiàn)代碼。
    2009-05-05
  • 解決asp.net core在輸出中文時亂碼的問題

    解決asp.net core在輸出中文時亂碼的問題

    最近在學(xué)習(xí)asp.net core的時候,嘗試在控制臺,或者頁面上輸出中文,會出現(xiàn)亂碼的問題。那么這該如何解決呢?下面通過這篇文章來一起看看吧,文中給出了詳細的解決方法,相信對大家有一定的參考價值。
    2016-12-12
  • asp.net中TextBox只能輸入數(shù)字的最簡潔的兩種方法

    asp.net中TextBox只能輸入數(shù)字的最簡潔的兩種方法

    這篇文章介紹了asp.net中TextBox只能輸入數(shù)字的最簡潔的兩種方法,有需要的朋友可以參考一下
    2013-11-11
  • 在Asp.net core中實現(xiàn)websocket通信

    在Asp.net core中實現(xiàn)websocket通信

    這篇文章介紹了在Asp.net core中實現(xiàn)websocket通信的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • DotNetCore深入了解之HttpClientFactory類詳解

    DotNetCore深入了解之HttpClientFactory類詳解

    這篇文章主要給大家介紹了關(guān)于DotNetCore深入了解之HttpClientFactory類的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評論