2017-03-22 4 views
0

これは他の人にとってはかなり明白かもしれませんが、これらのメソッドオーバーロードの動作を理解できません。 私たちだけが渡すものアクションメソッド名前。.Net MVCのHTML/AJAXヘルパーの作業

どうすれば@Html.Helpersが得られるでしょうかコントローラ

私の推測:

  1. 特定ヘルパーHttpContext
  2. this HtmlHelper htmlHelperから抽出パラメータは、リクエストに に関連するすべての情報を保持しています。

は、私は、ユーザーがアクションメソッドの名前を渡すべきカスタムヘルパーを作成しようとしていますし、それは魔法のは、それぞれのコントローラを取得

私は彼らが私にthis-

  • {コントローラ、ホーム}
  • {アクション、インデックス}
  • {ID、ヌル}
を示し、実行時にthis HtmlHelper htmlHelperroute-valuesをチェックします

実行時にHttpContextを確認したところ、nullでした。出力は、誰かが作業カーテンの後ろに提供することができる場合

  • {コントローラ、デバイス}
  • {ID、ヌル}

を{アクションは、提案} BE-べき予想

デフォルトの@Html.Helpersの例は素晴らしいでしょう。

更新 私が探しているものが見つかりました。 質問と回答のlinkはこちら

答えて

1

すべてのHtmlヘルパーは、HtmlHelperクラスにアクセスできます。その理由は、これらのヘルパーは、HtmlHelperクラスの拡張メソッド以外の何ものでもないということです。

public static class HelperExtensions 
{ 
    public static string ControllerName(this HtmlHelper helper) 
    { 
       string name = helper.ViewContext.Controller.GetType().Name 
       return String.Format("<span'>{0}</span>", name); 
      } 
    } 
} 

したがって、現在のリクエストに関するすべてがそこにあります。

View.cshtml

@Html.ControllerName() 
関連する問題