web-dev-qa-db-ja.com

ASP.NET MVCでコントローラーの外部にURLを生成するにはどうすればよいですか?

コントローラーの外部のヘルパーメソッドからコントローラーアクションを指すURLを生成するにはどうすればよいですか?

34
Shawn Mclean

UrlHelperをヘルパー関数に渡すと、次のことができます。

public SomeReturnType MyHelper(UrlHelper url, // your other parameters)
{
   // Your other code

   var myUrl =  url.Action("action", "controller");

  // code that consumes your url
}
0
Mahesh Velaga

HttpContextにアクセスできる場合は、以下を使用できます。

var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
84
L01NL

L01NLの回答を使用すると、現在のパラメーターが提供されている場合、アクションメソッドも現在のパラメーターを取得することに注意することが重要です。例えば:

id = 100のURLを含むプロジェクトの編集は_http://hostname/Project/Edit/100_です

urlHelper.Action("Edit", "Project")は_http://hostname/Project/Edit/100_を返します

urlHelper.Action("Edit", "Project", new { id = (int?) null });は_http://hostname/Project/Edit_を返します

2
Alexei

おそらくビューでメソッドを使用したいので、ビューのUrlプロパティを使用する必要があります。タイプUrlHelperであり、これにより、

<%: Url.Action("TheAction", "TheController") %>

ビューでそのような文字列参照を避けたい場合は、UrlHelperに拡張メソッドを記述して、それを作成できます。

public static class UrlHelperExtensions
{
    public static string UrlToTheControllerAction(this UrlHelper helper)
    {
        return helper.Action("TheAction", "TheController");
    }
}

これは次のように使用されます。

<%: Url.UrlToTheControllerTheAction() %>
1
Tomas Aschan