MVC 3控制器动作不起作用

时间:2011-06-10 09:25:50

标签: asp.net-mvc-3

我在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()
    }

4 个答案:

答案 0 :(得分:3)

首先,您似乎错误地设置了管理区域。 要添加一个区域,您应该在MVC项目的根目录中有一个文件夹结构区域/ {您所在区域的名称},例如区域/管理员包含所有常用的控制器,视图文件夹。

在那里你应该创建一个继承AreaRegistration的类,并至少实现AreaName属性和RegisterArea()方法。

在Application_Start()处理程序的Global.asax.cs中,第一行应为AreaRegistration.RegisterAllAreas();.

同样值得将RouteDebug添加到您的应用程序并添加您在Application_Start()中使用的web.config开关,以打开或关闭路由调试。当您的路线行为不当或没有获得您期望的动作参数时,这绝对是无价的。

答案 1 :(得分:1)

我的猜测是这是一个路由问题。检查您的路由是否正在破坏您期望工作的URL格式。

您能否向我们展示您的路由代码以及您期望工作的网址结构。我或许可以用这些信息给出更详细的答案。

答案 2 :(得分:1)

  • 您的控制器/操作名称可能与传入请求不一致。
  • 调试并验证@Request对象属性也可能有帮助!!
  • 您还可以使用以下工具可视化您的每个请求以及正在加工的路线..

http://mvcroutevisualizer.codeplex.com/

答案 3 :(得分:1)

重命名控制器后,我遇到了类似的问题。我花了一些时间来查看控制器的视图文件夹。完全忘记重命名。