1. ホーム
  2. asp.net-mvc

[解決済み] HTMLヘルパーでURLを生成する

2022-04-23 13:36:42

質問

通常、ASP.NETのビューでは、以下の関数を使って、URL( <a> ):

Url.Action("Action", "Controller");

しかし、カスタムHTMLヘルパーから行う方法が見当たりません。私は

public class MyCustomHelper
{
   public static string ExtensionMethod(this HtmlHelper helper)
   {
   }
}

ヘルパー変数にはActionメソッドとGenerateLinkメソッドがありますが、これらのメソッドで生成されるのは <a> 's. ASP.NET MVCのソースコードを少し調べてみましたが、わかりやすい方法は見つかりませんでした。

問題は、上記のUrlはビュークラスのメンバーであり、そのインスタンス化にはいくつかのコンテキストとルートマップが必要だということです(私はこれを扱いたくありませんし、どうせ扱うことになってもいません)。また、HtmlHelperクラスのインスタンスは、Urlインスタンスのコンテキスト情報のサブセットであると思われるコンテキストを持っています(しかし、私はそれを扱うことを望んでいません)。

まとめると、それは可能だと思いますが、私が見たすべての方法は、多かれ少なかれASP.NET内部のものに何らかの操作を伴うので、より良い方法はないかと考えています。

編集する 例えば、私が考える一つの可能性は、次のようなものです。

public class MyCustomHelper
{
    public static string ExtensionMethod(this HtmlHelper helper)
    {
        UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
        urlHelper.Action("Action", "Controller");
    }
}

しかし、それは正しいとは思えません。UrlHelperのインスタンスを自分で扱うのは嫌なのです。もっと簡単な方法があるはずだ。

解決方法は?

htmlヘルパー拡張メソッドの中で、このようなurlヘルパーを作成することができます。

var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var url = urlHelper.Action("Home", "Index")