MVC传递参数不起作用

时间:2014-09-29 05:14:18

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

我试图通过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}之前,我还可以完美地导航到网址,以便查看工作正常。

提前致谢。

4 个答案:

答案 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)

正如Marc_s在评论中所说的那样。当您的路线为

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

我希望你能理解

相关问题