ASP.NET MVC - 获取路由

时间:2016-05-25 17:58:41

标签: c# asp.net-mvc asp.net-mvc-routing

我正在开发一个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';

我尝试创建一个完整路径的网址,而不是仅添加查询字符串参数。

2 个答案:

答案 0 :(得分:1)

应用多个路线时,您可以使用Order属性上的[Route]属性设置路线的应用顺序。默认情况下,所有已定义的路由的Order值为0,路由从最低到最高处理。

[Route("add", Order = 2)]
[Route("~/dashboard/orders/{orderId}/item", Order = 1)]
public virtual ActionResult Add(string orderId){...}

答案 1 :(得分:0)

MVC总是使路由短路。 /account/orders/add路由是完全有效的,因为查询字符串是任意的:它可以填充剩余的东西。如果您希望在具有更简单路线的操作上使用更复杂的路线,那么您唯一的选择是命名路线并按名称专门获取:

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

然后:

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