【问题标题】:MVC 3 controller action not workingMVC 3 控制器动作不起作用
【发布时间】:2011-06-10 09:25:50
【问题描述】:

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

MedicalHistory 行动:

   [HttpGet]
    public ActionResult MedicalHistory(int id = 0)
    {
      //some code
      return View()
    }

【问题讨论】:

  • 我敢打赌你搞砸了路线。
  • 您在注册控制器中的 MedicalHistory 操作看起来如何?
  • 我认为问题在于路线结构复制
  • @Evgeniy 我删除了第二个路由并只保留了一个但仍然存在问题..非常奇怪
  • 相关控制器的名称是什么?

标签: asp.net-mvc-3


【解决方案1】:

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

您应该在其中创建一个继承 AreaRegistration 并至少实现 AreaName 属性和 RegisterArea() 方法的类。

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

此外,将RouteDebug 添加到您的应用程序并添加您在 Application_Start() 中使用的 web.config 开关以打开或关闭路由调试也是非常值得的。当您的路线行为异常或未获得您期望的操作参数时,这绝对是无价的。

【讨论】:

    【解决方案2】:

    我的猜测是这是一个路由问题。检查您的路由没有破坏您期望的 URL 格式。

    您能否向我们展示您的路由代码以及您希望使用的 URL 结构。我也许可以根据这些信息给出更详细的答案。

    【讨论】:

      【解决方案3】:
      • 您的控制器/操作名称可能与传入请求不一致。
      • 调试和验证@Request 对象属性可能也会有所帮助!!
      • 您还可以使用下面的工具可视化您的每个请求以及正在处理的路由..

      http://mvcroutevisualizer.codeplex.com/

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-30
          • 1970-01-01
          • 2013-08-19
          • 1970-01-01
          • 1970-01-01
          • 2015-04-25
          • 2012-09-14
          • 2017-04-07
          相关资源
          最近更新 更多