我装饰了一个动作(在我的家庭控制器中),如下所示:
[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被击中了!
如何解决此问题?
答案 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
,并且第二条路径将允许要调用的动作。