1

我在控制器中重载索引操作时遇到了一些问题。在控制器中,我有以下操作:

public ActionResult Index(int id)
{
    return View();
}

public ActionResult Index()
{
    return View();
}

转到任一 URL(控制器名称/或控制器名称/1)都会导致 500 错误。但是,当我使用:

public ActionResult Index(int? id)
{
    return View();
}

controllername/ URL 有效,但 controllername/1 导致 404 错误。我的 global.asax 很普通:

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

我想做的是能够处理空 id 以及整数 id 值。任何建议将不胜感激。

谢谢!

4

2 回答 2

1

我认为您需要为此明确路线:

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

如果它不起作用,您可能需要更明确并在之前添加:

routes.MapRoute(
    "ControllerName",
    "ControllerName",
    new { controller = "ControllerName", action = "Index"}
);
于 2012-05-13T15:14:45.583 回答
1

我认为您在这里不需要重载,而只需要在索引操作中检查空值。重载动作不是一个好主意,因为框架不知道在空索引的情况下调用哪个动作。

为每个动作重载添加自定义路由将导致响应时间变慢,因为要解决的自定义路由太多。

于 2012-05-13T15:23:14.130 回答