【问题标题】:ASP.NET MVC - Getting a RouteASP.NET MVC - 获取路由
【发布时间】:2016-05-25 17:58:41
【问题描述】:

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

在索引视图中,我引用了这样的添加操作:

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,而不仅仅是附加查询字符串参数。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      MVC 总是使路由短路。 /account/orders/add 路由是完全有效的,因为查询字符串是任意的:它可以把剩下的东西塞进去。如果你想要一个更复杂的路由,一个更简单的路由,那么你唯一的选择是命名路由并通过名称专门获取它:

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

      然后:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        • 2015-12-18
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多