Как создать URL-адрес, указывающий на действие контроллера из вспомогательного метода вне контроллера?
Как создать URL-адрес вне контроллера в ASP.NET MVC?
Ответ 1
Передайте UrlHelper вашей вспомогательной функции, а затем вы можете сделать следующее:
public SomeReturnType MyHelper(UrlHelper url, // your other parameters)
{
// Your other code
var myUrl = url.Action("action", "controller");
// code that consumes your url
}
Ответ 2
Вы можете использовать следующее, если у вас есть доступ к HttpContext
:
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
Ответ 3
Используя ответ L01NL, может быть важно отметить, что метод Action также получит текущий параметр, если он предоставлен. Например:
проект редактирования с id = 100
Url http://hostname/Project/Edit/100
urlHelper.Action("Edit", "Project")
возвращает http://hostname/Project/Edit/100
while urlHelper.Action("Edit", "Project", new { id = (int?) null });
возвращает http://hostname/Project/Edit
Ответ 4
Поскольку вы, вероятно, хотите использовать метод в представлении, вы должны использовать свойство 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() %>