私たちのプロジェクトは、多くのカスタム HtmlHelper 拡張メソッドを使用して、次のようなビューで参照されます。
@Html.MyHelperMethod()
ただし、それらをシステムのものから分離して、次のいずれかのようなことができるようにしたいと思います。
@Html.MyApp.MyHelperMethod()
@MyAppHtml.MyHelperMethod()
サブセクションで Razor HtmlHelpers をフォローすることによって? 私は次のようなものを実装することができました
@Html.MyApp().MyHelperMethod()
これは、MyApp() を関数として使用すると見栄えがよくありません。そこで、自分のクラスを作ることにしました。HtmlHelper と同じように ViewContext にアクセスできるようにしたい:
public class MyHtmlHelper
{
public ViewContext ViewContext { get; private set; }
public MyHtmlHelper(ViewContext viewContext)
{
this.ViewContext = viewContext;
}
public MvcHtmlString MyHelperMethod()
{
//... Do something that accesses this.ViewContext
}
}
ただし、何を継承してオーバーライドするか (ViewPage?)、MyHtmlHelper プロパティを配置する場所、または初期化する場所がわかりません。私が思い付くことができる他の代替案は、すべてのモデルが継承する BaseModel オブジェクトを作成し、MyHtmlHelper プロパティを追加することです。
@Model.MyAppHtml.MyHelperMethod()
これには、すべてのコントローラー メソッドが (ViewContext を参照するために) モデル オブジェクトにコンテキストを渡す必要がありますが、これは面倒なトレードオフのように思えます。関数を使用しないヘルパー メソッドを「サブセクション化」する方法に関する他のアイデアはありますか?
更新:ここでの回答のおかげで、次のようなカスタム HtmlHelper クラスを作成する詳細な例を見つけました: Razor ビューのベース タイプの変更