asp.NetMVC helperとカスタム関数@functions小結

11563 ワード

asp.NetRazorビューは.cshtml接尾辞は、c#コードとhtmlラベルの切り替えを簡単に実現し、開発効率を大幅に向上させます.しかし、Razor文法にはいくつかのマシュマロがあります.私たちの開発効率をより強く向上させ、開発バグの出現を減らすことができます.
Razorは@尻尾記号を採用しており,この記号こそMvc開発効率の向上を成し遂げた.@に関連する2つの再利用可能なhelper,functionsについて説明する.
 
現代化のプログラマーとして、私たちはできるだけ一つの原則を守ります.あなた自身を繰り返さないでください.だから再構築できるコードは私たちはすべて合併しますが、これはバックグラウンドコードC#にとって、View層でも簡単なビジネスロジックを行うことができます.もちろん、View層は複雑なビジネスロジックの判断を行うことができますが、先輩は複雑なビジネスロジックがModelやControllerの仕事だと言っています.View層の任務は、ビジネスロジックが少なければ少ないほど良いことを示しています.
 
ビューレイヤで行われたいくつかの再構築にはどのようなものがありますか?そのうちの1つは@helperカスタムクリップです.
例えば、私たちは1つの数字を出力しなければなりません.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フォルダの下のファイルは最終的にクラスにコンパイルされます.
まとめ:状況に応じて出力を実現するにはどのような実現方法があるかをまとめます.もちろん、私が考えることができるのは完全ではありません.
  • はhelperによってグローバルな設定を行い、判断が必要なすべてのページにこのhelperメソッドを呼び出す.
  • はバックグラウンドコードで判断し、フロントビューに出力する.
  • はHtmlを通過する.Action()またはHtml.Partial()を取得するには、もちろん簡単にhelperを採用すれば、複雑にこの方法を採用することができます.
  • は、関数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を用いて実現できる.