2016-05-25 5 views
1

Я работаю над ASP.NET MVC-приложением. В моем приложении, у меня есть контроллер, который выглядит следующим образом:ASP.NET MVC - Получение маршрута

[RoutePrefix("account/orders")] 
public partial class AccountOrdersController : Controller 
{ 
    [Route] 
    public virtual ActionResult Index() 
    { 
    return View(); 
    } 

    [Route("add")] 
    [Route("~/dashboard/orders/{orderId}/item")] 
    public virtual ActionResult Add(string orderId) 
    { 
    return View(); 
    } 
} 

В представлении Index, я ссылающийся на Add действие, как это:

var url = '@Url.Action("Add", "AccountOrdersController", new RouteValueDictionary(new { orderId = "xyz" }))'; 

Когда представление визуализируется, выше становится :

var url = '/account/orders/add?orderId=xyz'; 

Как получить выше, чтобы быть оказаны как:

var url = '/account/orders/xyz/item'; 

Я пытаюсь создать URL-адрес, который является полным путем, а не просто добавлять параметры строки запроса.

ответ

0

MVC всегда замыкает маршруты. Маршрут /account/orders/add совершенно правдоподобен, так как строка запроса произвольна: она может просто наполнить все, что осталось в ней. Если вы хотите более сложный маршрут на действие, которое имеет более простой путь, то ваш единственный вариант, чтобы назвать маршрут и получить его специально по имени:

[Route("~/dashboard/orders/{orderId}/item", Name="DashboardOrderAdd")] 

Тогда:

@Url.RouteUrl("DashboardOrderAdd", new { orderId = "xyz" }) 
1

При применении несколько маршрутов, вы можете установить порядок, в котором маршрут применяется с использованием свойства Order по атрибуту [Route]. По умолчанию все определенные маршруты имеют значение Order0, а маршруты обрабатываются от самого низкого до самого высокого.

[Route("add", Order = 2)] 
[Route("~/dashboard/orders/{orderId}/item", Order = 1)] 
public virtual ActionResult Add(string orderId){...} 
Смежные вопросы