子文件夹中的ASP.NET MVC自定义路由

时间:2011-03-01 13:14:11

标签: c# asp.net-mvc asp.net-mvc-routing

我在Google上搜索过(可能是错误的关键字),并访问了ASP.NET / MVC网站的教程。但是没有正确理解MVC的路由。 我有一个下图的情景。我想在网站发布时显示Index.cshtml。

enter image description here

我已经以各种方式更改了Global.asax.cs文件的RegisterRoutes方法。最新的代码(不工作)在

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

如果有人用不同的例子解释MapRoute方法并回答我的问题,我将非常高兴。

2 个答案:

答案 0 :(得分:2)

我认为问题不在于您的路由,我认为这是将View和Controller文件夹移动到App文件夹引起的。

MVC对于文件夹所在的位置使用“约定优于配置”,我猜它在新文件夹中找不到视图/控制器?

来自here

  

这些文件夹甚至包括在内   因为ASP.NET MVC应用程序是空的   默认情况下是ASP.NET MVC框架   使用“约定优于配置”   接近并做出一些默认   基于文件夹命名的假设   约定。例如,控制器   在Views文件夹中查找视图   默认,无需你   在代码中明确指定它。   坚持使用默认约定   减少您需要的代码量   写,也可以使它更容易   其他开发人员了解你的   项目

我并不是说你不可能拥有像你这样的文件夹结构,我只是不相信它支持开箱即用。 我个人建议回到默认值,如果你需要保留这个结构,那么我认为你可能需要实现自己的ControllerFactory和ViewEngine(我不确定这些是否是你需要更改的正确钩子)

编辑: 您是否尝试将App作为区域实现?

EDIT2: 如果您尝试将App添加为区域,则需要遵循一些步骤,我不确定这是否是您尝试做的原因是因为我认为区域必须存在于Areas文件夹中。 有一些步骤概述here包括如何注册你的区域,如果这是你想要做的。

答案 1 :(得分:1)

ASP.NET MVC 3具有子文件夹的内置功能。这被称为区域(感谢@Morten让我知道这个词。)但是在完成了区域的MSDN Walkthrough后,我仍然无法运行Web应用程序。错误显示配置错误。 @Danny也注意到了。
然后我搜索并发现子文件夹中的 Web.config文件不应包含特定于应用程序的属性
因此,我从Web.config文件中删除了这些属性。然后我就能跑了。但是当我想要导航到我的子文件夹/区域视图时,会出现一些运行时错误。当我点击Regions文件夹视图的链接时,错误是“无法加载类型'System.Web.Mvc.ViewPage< ..<>'”
然后我再次搜索并找到了有用的this帖子。然后我的应用程序成功运行,我可以浏览所有页面。