AttributeRouting ActionLink帮助器渲染查询字符串值,而不是在路由中包含参数

时间:2014-08-14 20:24:42

标签: asp.net-mvc asp.net-mvc-5.1

我正在开发我的第一个MVC项目并在我的控制器中使用属性路由。我的一个动作有两个可能的路径路径,我有一个小问题。路线本身正在工作,但生成的actionLinks并不是我喜欢的。

路线:

    [Route("add")]
    [Route("{parentId:int?}/add")]

ActionLink定义:

 @Html.ActionLink("Add Category", "Add", "Category", new { parentId = @Model.CurrentCategoryId}, new { @Class = "btn btn-primary"})

这样可行,但是当currentCategoryId不为null时,生成的链接为:

/categories/add?parentId=2

但我希望看到的(当您手动滚动网址时拾取)是:

/categories/2/add

无论如何我可以用actionLink或任何其他MVC魔术来实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

尝试:

[Route("add", Order = 2)]
[Route("{parentId:int?}/add", Order = 1)]

这仍然可能无效,因为您拥有不需要参数的路由这一事实可能会使路由逻辑短路。另一种选择是命名每条路线,然后明确说明你想要的路线:

[Route("add", Name = "AddCategory")]
[Route("{parentId:int?}/add", Name = "AddCategoryForParentId")]

然后:

@Html.RouteLink("Add Category", "AddCategoryForParentId", new { parentId = @Model.CurrentCategoryId }, ...)