MVC属性路由问题

时间:2017-04-23 13:18:58

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

我装饰了一个动作(在我的家庭控制器中),如下所示:

[Route("view-book")]
public ActionResult ViewBook(int? id1, string id2)

在我的视图中,我使用javascript填充了一些超链接:

tbody = tbody + '<a href="@Url.Action("ViewBook", "Home")/' + item.Id + '/' + item.Slug + '">View Book</a>';

使用上面的代码,超链接的URL正确呈现。 E.g:

https://localhost:44306/view-book/1/this-book

然而,ActionResult并没有被击中。因此,我将路由修改更改为:

[Route("view-book/{id1:int?}/{id2}")]
public ActionResult ViewBook(int? id1, string id2)

现在网址渲染错误如下:

https://localhost:44306/Home/ViewBook/1/this-prop

但是,如果我手动将URL更改为正确的URL,如上所述:

https://localhost:44306/view-book/1/this-prop

然后ActionResult被击中了!

如何解决此问题?

1 个答案:

答案 0 :(得分:2)

您可以在操作中使用多个路线。

[HttpGet]
[Route("view-book")] // Matches GET view-book
[Route("view-book/{id1:int?}/{id2}")] //Matches GET view-book/1/slug
public ActionResult ViewBook(int? id1, string id2) { ... }

这样,当您在javascript中构建路由时,第一条路径现在应该允许您在之前呈现正确的URL,因为@Url.Action("ViewBook", "Home")应根据需要解析为view-book,并且第二条路径将允许要调用的动作。