我在asp.net MVC3中有工作应用程序。今天当我在VS2010中进行操作时,我发现特定控制器的动作都没有触发。在浏览控制器/操作时,我得到页面未找到消息。我检查了所有页面都存在(控制器,视图)。即使我向该控制器添加新动作,也根本不会被调用。与此同时,来自其他控制器的操作正常。我可以访问页面。这很奇怪,我无法弄明白。 有什么帮助吗?
编辑:
无效的控制器操作是http://localhost:7400/Registration/MedicalHistory/0
来自global.asax的代码
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Home and error page
routes.MapRoute("error", "error", new { controller = "Home", action = "Error" });
//Default routing
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Program", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "ASPNETMVCApplication.Controllers" }
);
//Admin routing
routes.MapRoute(
"Admin", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Program", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "ASPNETMVCApplication.Areas.Admin.Controllers" }
);
}
医疗历史行动:
[HttpGet]
public ActionResult MedicalHistory(int id = 0)
{
//some code
return View()
}
答案 0 :(得分:3)
首先,您似乎错误地设置了管理区域。 要添加一个区域,您应该在MVC项目的根目录中有一个文件夹结构区域/ {您所在区域的名称},例如区域/管理员包含所有常用的控制器,视图文件夹。
在那里你应该创建一个继承AreaRegistration的类,并至少实现AreaName属性和RegisterArea()方法。
在Application_Start()处理程序的Global.asax.cs中,第一行应为AreaRegistration.RegisterAllAreas();.
同样值得将RouteDebug添加到您的应用程序并添加您在Application_Start()中使用的web.config开关,以打开或关闭路由调试。当您的路线行为不当或没有获得您期望的动作参数时,这绝对是无价的。
答案 1 :(得分:1)
我的猜测是这是一个路由问题。检查您的路由是否正在破坏您期望工作的URL格式。
您能否向我们展示您的路由代码以及您期望工作的网址结构。我或许可以用这些信息给出更详细的答案。
答案 2 :(得分:1)
答案 3 :(得分:1)
重命名控制器后,我遇到了类似的问题。我花了一些时间来查看控制器的视图文件夹。完全忘记重命名。