【问题标题】:Simple MVC routing problem简单的MVC路由问题
【发布时间】:2011-01-09 11:37:43
【问题描述】:

我有几个页面与其他页面非常相似,但其中一个不起作用。

当我写 'http://localhost:2265/Segment/' 时,我收到烦人的错误消息“'/' 应用程序中的服务器错误。 找不到资源。”

“http://localhost:2265/User/”之类的其他页面和“http://localhost:2265/Segment/Create”也运行良好。所以段的索引是问题所在。我使用了 ASP.NET 路由调试器,在其他页面上我得到了正确的映射,但是在使用调试器时我也收到了同样的错误消息“找不到资源”。我认为这表明默认路由也没有捕获它。 .

有什么想法吗?

这是我的 MapRoute 命令。

            routes.MapRoute(
            "Maintenance",
            "Maintenance/{action}",
            new { controller = "Maintenance", action = "Index", id = "" }
        );

        routes.MapRoute(
            "User",
            "User/{action}",
            new { controller = "User", action = "Index", id = "" }
        );

        routes.MapRoute(
            "Segment",
            "Segment/{action}",
            new { controller = "Segment", action = "Index", id = "" }
        );

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

更新:

感谢您的快速回复!

我删除了除默认路由之外的所有路由。没有解决问题,但是现在路由列表变短了。

我的控制器文件中有其他类,如下所示:

公共类 SegmentFormViewModel { } 公共类 SegmentController : 控制器 { } 公共类 SegmentFormCreateModel : 段 { }

我试图将它移动到控制器内,但这也无济于事。

有没有办法调试这个问题?

更新:

这是我的控制器(没有方法的内容)

公共类 SegmentController : 控制器 { // // 获取:/段/ 公共行动结果索引() { } // // GET: /Segment/Details/5 公共 ActionResult 详细信息(Guid id) { } // // 获取:/段/创建 公共动作结果创建() { } // // 发布:/段/创建 [AcceptVerbs(HttpVerbs.Post)] 公共 ActionResult 创建(FormCollection 集合) { } // // GET: /Segment/Edit/5 公共 ActionResult 编辑(int id) { } // // POST: /Segment/Edit/5 [AcceptVerbs(HttpVerbs.Post)] 公共 ActionResult 编辑(int id,FormCollection 集合) { } }

【问题讨论】:

  • 你真的不需要这三个路线。默认路由将处理所有这些。此外,我刚刚在一个从头开始创建的 ASP.NET MVC 应用程序中测试了您的路由,它工作得非常好。所以我猜还有其他原因导致您出现问题。

标签: asp.net-mvc model-view-controller routing url-routing


【解决方案1】:

要匹配您的 /Segment/ 路由,您将需要一个“SegmentController”控制器类来具有一个接受 GET 请求的“索引”操作,即不受 [AcceptVerbs(HttpVerbs.Post)] 的限制。

正如 Darin 已经评论的那样,默认路由将处理您添加的所有其他路由,因此您不需要额外的路由。

更新后:
您的问题可能更多与 Segment 控制器中的 actions 有关。你在哪个文件中有什么类并不重要。您在 Segment 控制器中有哪些操作?

第二次更新后:
您的操作看起来不错,所以我怀疑问题出在您未列出的代码中。
下一步:
1.使用已经提到的路由器调试器。
2. 下载 MVC 源代码,以便您可以单步执行。
不得已:开始一个全新的项目,只添加 Segment 控制器。然后不断添加相关代码,直到找到问题为止。

【讨论】:

    【解决方案2】:

    使用Phil Haack's RouteDebugger。它会告诉您匹配的内容,这通常会很快解决问题。

    设置起来非常简单:将 RouteDebug.dll 放入您的 /bin 文件夹,然后对您的 App Start 事件进行更改:

    protected void Application_Start(object sender, EventArgs e)
    {
      RegisterRoutes(RouteTable.Routes);
      RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
    }
    

    【讨论】:

    • 这与我用来调试此问题的程序完全相同,但是当我尝试打开此段显示时,我得到的只是“找不到页面”。所有其他页面都运行良好,即使写入 localhost:2265/Some_random_text 也会匹配默认路由,但不会匹配 localhost:2265/Segment
    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2011-05-23
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多