1

私たちのプロジェクトは、多くのカスタム 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 ビューのベース タイプの変更

4

2 に答える 2

1

WebViewPageカスタム プロパティを継承して追加するクラスを作成し、そのクラスを継承するようにすべてのビューを変更する必要があります。

Web.config で既定の基本クラスを変更できます。

于 2013-05-01T15:31:13.843 に答える
0

次のように進めることができるスケルトンがあります

public MtWebViewPage<TModel> : WebViewPage
{
  public HtmlHelper<TModel> MyHtml {get;set;}
}
于 2013-05-01T17:58:48.770 に答える