コントローラーの外部のヘルパーメソッドからコントローラーアクションを指すURLを生成するにはどうすればよいですか?
UrlHelperをヘルパー関数に渡すと、次のことができます。
public SomeReturnType MyHelper(UrlHelper url, // your other parameters)
{
// Your other code
var myUrl = url.Action("action", "controller");
// code that consumes your url
}
HttpContext
にアクセスできる場合は、以下を使用できます。
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
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
_を返します
おそらくビューでメソッドを使用したいので、ビューの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() %>