我在Google上搜索过(可能是错误的关键字),并访问了ASP.NET / MVC网站的教程。但是没有正确理解MVC的路由。
我有一个下图的情景。我想在网站发布时显示Index.cshtml。
我已经以各种方式更改了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方法并回答我的问题,我将非常高兴。
答案 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帖子。然后我的应用程序成功运行,我可以浏览所有页面。