Подтвердить что ты не робот

Как создать URL-адрес вне контроллера в ASP.NET MVC?

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

4b9b3361

Ответ 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() %>