Внутри представления я могу получить полную информацию о маршруте к действию?
Если у меня есть действие под названием DoThis в контроллере MyController. Могу ли я перейти на путь "/MyController/DoThis/"
?
Внутри представления я могу получить полную информацию о маршруте к действию?
Если у меня есть действие под названием DoThis в контроллере MyController. Могу ли я перейти на путь "/MyController/DoThis/"
?
Вы имеете в виду использование метода Action в помощнике Url:
<%= Url.Action("DoThis", "MyController") %>
или в Razor:
@Url.Action("DoThis", "MyController")
который даст вам относительный url (/MyController/DoThis
).
И если вы хотите получить абсолютный URL-адрес (http://localhost:8385/MyController/DoThis
):
<%= Url.Action("DoThis", "MyController", null, Request.Url.Scheme, null) %>
Несколько дней назад я написал сообщение в блоге об этой самой теме (см. Как создавать URL-адреса абсолютного действия с использованием класса UrlHelper). Как отметил Дарин Димитров: UrlHelper.Action
будет генерировать абсолютные URL-адреса, если параметр protocol
указан явно.
Однако я рекомендую написать собственный метод расширения для удобства чтения:
/// <summary>
/// Generates a fully qualified URL to an action method by using
/// the specified action name, controller name and route values.
/// </summary>
/// <param name="url">The URL helper.</param>
/// <param name="actionName">The name of the action method.</param>
/// <param name="controllerName">The name of the controller.</param>
/// <param name="routeValues">The route values.</param>
/// <returns>The absolute URL.</returns>
public static string AbsoluteAction(this UrlHelper url,
string actionName, string controllerName, object routeValues = null)
{
string scheme = url.RequestContext.HttpContext.Request.Url.Scheme;
return url.Action(actionName, controllerName, routeValues, scheme);
}
Затем метод можно вызвать следующим образом: @Url.AbsoluteAction("SomeAction", "SomeController")
Вы можете использовать метод Url.Action, где вы можете просто передать имя контроллера и требуемое действие, и оно будет генерировать соответствующий URL-адрес для вас, например
Url.Action("MyController", "DoThis")