Как создать URL вне контроллера в ASP.NET MVC? - PullRequest
32 голосов
/ 05 февраля 2011

Как создать URL-адрес, указывающий на действие контроллера, из вспомогательного метода вне контроллера?

Ответы [ 4 ]

76 голосов
/ 06 февраля 2014

Вы можете использовать следующее, если у вас есть доступ к HttpContext:

var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
2 голосов
/ 26 ноября 2015

Используя ответ L01NL, может быть важно отметить, что метод Action также получит текущий параметр, если он указан. Например:

редактирование проекта с 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

1 голос
/ 05 февраля 2011

Поскольку вы, вероятно, хотите использовать метод в представлении, вам следует использовать свойство 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() %>
0 голосов
/ 05 февраля 2011

Передайте UrlHelper вашей вспомогательной функции, и тогда вы сможете сделать следующее:

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

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

  // code that consumes your url
}
...