我正在开发一个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';
我尝试创建一个完整路径的网址,而不是仅添加查询字符串参数。
答案 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" })