【问题标题】:MVC5 can't find controller in same folder as defaultMVC5 无法在默认相同的文件夹中找到控制器
【发布时间】:2017-12-08 21:15:35
【问题描述】:

我有一个路由问题。我在同一个文件夹中有 3 个控制器。

/pages/defaultcontroller
/pages/datacontroller
/pages/infocontroller

所有控制器都有一个Index 操作,并且在views 文件夹中有index.cshtml 视图。系统可以找到默认的控制器,但是找不到其他的。

例如http://servername/pages/default 工作正常,但 http://servername/pages/data 不起作用,http://servername/pages/info 不起作用

错误是

“/”应用程序中的服务器错误。

找不到资源。

描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的网址:/pages/info

我有这条路线,已配置

context.MapRoute(
    "pages_default",
    "pages/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional }
);

唯一奇怪的是,这是添加到现有 Web 表单项目中的 mvc 部分,作为向 mvc 的应用程序迁移开发的一部分。

我对 mvc 很陌生,到目前为止我还很享受 :)

有什么想法吗?

更新

我尝试添加额外的路由,仍然是同样的问题

        context.MapRoute(
            "pages_data",
            "pages/data/{action}/{id}",
            new { controller = "data", action = "Index", id = UrlParameter.Optional }
        );

        context.MapRoute(
            "pages_info",
            "pages/info/{action}/{id}",
            new { controller = "info", action = "Index", id = UrlParameter.Optional }
        );

        context.MapRoute(
            "pages_default",
            "pages/{controller}/{action}/{id}",
            new { controller = "default", action = "Index", id = UrlParameter.Optional }
        );

更新(2)

路由调试器的输出(问题顶部)

【问题讨论】:

  • 使用RouteDebugger NuGet pkg,它将帮助您调试问题
  • 检查控制器名称的命名空间是否正确,并检查 RouteDebugger 生成的路由。通常这个问题是由于路线或区域配置中的错误设置引起的。
  • 我也不会使用pages,因为控制器不是页面。
  • Controllers 文件夹中也有 DefaultController?
  • 尝试将所有控制器文件放在Controllers 目录中,先看看它们是否正常工作,然后配置视图引擎以找到合适的视图(我告诉你这可能是控制器命名空间问题)。使用 pages 作为控制器父目录偏离了 MVC 标准,其中控制器存储在 Controllers 目录中,视图存储在 Views 目录中。

标签: c# asp.net-mvc visual-studio-2013 asp.net-mvc-5


【解决方案1】:

你的路线应该是:

context.MapRoute(
    "pages_default",
    "pages/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

您没有在默认值中定义 controller 参数。

【讨论】:

  • 不,这行不通。因为我不想要一个默认控制器。查看我的更新
  • 2 分:1) 不,它没有。 2) 无论如何,这不会解决问题。
  • @djack109 没有人会知道,因为我们没有您的代码。使用RouteDebugger。没有它,我永远不会开始一个项目。它会立即告诉您问题。
  • 对不起,好点子,我想你已经在这个线程上回复了stackoverflow.com/questions/44922221/…。我正在使用 routedebugger,它告诉我我的路线匹配
【解决方案2】:

我发现了问题。我重命名了文件夹以避免可能的系统冲突。 当我添加新控制器时,它们的命名空间反映了新文件夹名称,而现有项目具有基于原始文件夹名称的旧命名空间。

一旦现有文件命名空间被重命名以反映新文件夹,一切正常。它给我带来了一些额外的工作,但我现在回到了正轨

感谢大家的意见

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多