gpt4 book ai didi

javascript - .NET MVC 多路由问题

转载 作者:行者123 更新时间:2023-12-01 03:24:29 25 4
gpt4 key购买 nike

我在 .NET MVC 5 应用程序中注册了一条路由,如下所示:

 routes.MapRoute(
"Books", // Route name
"Books/{id}", // URL with parameters*
new { controller = "Books", action = "Index", id =
UrlParameter.Optional }
);

现在可以通过以下方式访问网络 Controller 和操作索引:

mylocalhost:8080/Books/50ShadesOfGrey

现在的问题是我有另一种方法,我可以使用此参数发布数据,如下所示:

  @if (Url.RequestContext.RouteData.Values["id"] != null)
{
@:DoScan('@Url.RequestContext.RouteData.Values["id"]');
}

DoScan 是一个 JavaScript 方法,它接受书名作为参数,然后将书名发布到我在同一 Controller (Books)中的这个方法,其定义如下:

  [HttpPost]
public ActionResult LoadData(string bookName)
{
// method sould now be called but nothing happens??
}

我在没有最近添加的路由的情况下测试了它,并且帖子工作得很好...但是当我添加此路由时,就像这个 LoadData HttpPost 方法被完全忽略了?我觉得我应该在路由配置中添加另一条路由,但我不太确定在这里做什么?有人可以帮我吗?

附注

post方法中定义的路由是这样的:

/Books/LoadData/

但是该操作永远不会被触发?

附注该方法通过数据表 ajax 调用来调用,如下所示:

 "ajax": {
"url": "/Books/LoadData/",
"type": "POST",
"data": {
"bookName": _bookName /*Parameter I passed through calling the function*/
},

最佳答案

我敢打赌你的配置中也有默认路由。所以实际上你有:

Books/{id}
{controller}/{action}/{id}

MVC 将选择第一个符合您请求的。 post 方法中的请求是带有一些数据的“Books/LoadData”。到底有什么数据并不重要,重要的是它不是 URL 的一部分。

因此“Books/LoadData”与第一条路线匹配,“LoadData”为 {id}。因此,您的请求将转到 Index 操作,并且不会触发 LoadData 操作。

您的意图显然是使用默认路由捕获此请求,但同样,MVC 选择第一个匹配的。

要解决此问题,您需要删除您的路线,或者在其上方添加第三条路线:

Books/LoadData
Books/{id}
{controller}/{action}/{id}

请注意,这个新路由没有 URL 参数,也不需要任何参数 - 数据将在请求正文中传递。

关于javascript - .NET MVC 多路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com