我试图通过url将参数传递给ASP.NET MVC控制器。我是第一次使用自定义路线,我不确定我是否遗漏了一些东西。
这是我打电话的网址:
http://localhost:2053/agent-edit/?id=12
这是我的自定义网址:
routes.MapRoute(name: "agent", url: "agent", defaults: new { controller = "Agents", action = "Index" });
routes.MapRoute(name: "agent-add", url: "agent-add", defaults: new { controller = "Agents", action = "Add" });
routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { controller = "Agents", action = "Edit" });
这是我的控制器:
public ActionResult Edit(int id)
{
bla_Agent Agent = bla_Agent.getSingleAgent(id);
return View(Agent);
}
我可以导航到我的所有其他网址,只是当我尝试发送一个似乎不起作用的ID时。我刚刚在Chrome控制台中收到404未找到错误。在我添加{id}
之前,我还可以完美地导航到网址,以便查看工作正常。
提前致谢。
答案 0 :(得分:0)
尝试最后一条路线:
routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new {
controller = "Agents",
action = "Edit",
id = UrlParameter.Optional
});
答案 1 :(得分:0)
如果您想将您的操作称为:http://localhost:2053/agent-edit/?id=12
然后你必须将最后一条路线改为:
routes.MapRoute(name: "agent-edit", url: "agent-edit", defaults: new { controller = "Agents", action = "Edit" });
答案 2 :(得分:0)
http://localhost:2053/agent-edit/?id=12
无效,因为它与您在路线中指定的模式不匹配。因此它应该像http://localhost:2053/agent-edit/12
,因为控制器期望在路径的末尾附加Id。
此外,如果您希望id是可选的,请尝试使用:
public ActionResult Edit(int? id){
}
答案 3 :(得分:0)
routes.MapRoute(name: "agent-edit", url: "agent-edit/{id}", defaults: new { controller = "Agents",
action = "Edit" });
然后你不需要像查询参数一样调用url。你可以简单地做到
http://localhost:2053/agent-edit/12
原因是12将被视为路由值,然后将其传递到您从控制器调用的相应操作
在你的情况下,它是
public ActionResult Edit(int id)
{
bla_Agent Agent = bla_Agent.getSingleAgent(id);
return View(Agent);
}
因此您只需将其称为http://localhost:2053/agent-edit/12
如果您传递的是另一个值AgentName
,则为是。然后你必须通过可能的查询字符串传递它
http://localhost:2053/agent-edit/12?AgentName=ABC
你的控制器将是
public ActionResult Edit(int id,string AgentName)
{
bla_Agent Agent = bla_Agent.getSingleAgent(id);
return View(Agent);
}
现在它的工作原理是它们在路由配置中映射路由映射的方式。您在路由配置中声明的路由期望{id}
作为路由值,因此它可以作为尾部斜杠传递给您。但是在AgentName
的情况下。在Route值参数中没有提到它。所以它将作为查询字符串传递,其中url具有查询字符串键值对。与路由值不同的是Id
。
我希望你能理解