MVC 3不会在区域下查找视图

Jac*_*ius 10 c# asp.net asp.net-mvc-3-areas asp.net-mvc-3

我在MVC 3中使用了多个区域,而且我的查看无法找到问题.路由似乎正确地拾取我的控制器(所有操作都没有任何问题地执行),但是当我返回视图MVC时根本找不到它.

因此,如果我在一个名为'Some'的区域中有一个名为'Thing'的简单控制器,我会执行以下操作...

public ActionResult Index()
{
    return View("Index");
}
Run Code Online (Sandbox Code Playgroud)

操作正确执行,但MVC找不到视图,我会收到类似的消息

未找到视图'索引'或它的主人......它将显示所有搜索到的位置,这将是

〜/ Views/Thing/Index.cshtml~/Views/Shared/Index.cshtml

等等,但它没有看

〜/一些/浏览/事/ Index.cshtml

关于我做错了什么的任何想法?

Jac*_*ius 17

好的,很遗憾必须回答我自己的问题,但没有人真的给了我正在寻找的答案.看来我的问题是自定义路由.

为了重新创建问题,我创建了一个空白的MVC 3项目并添加了一个名为"Some"的区域和一个名为"Thing"的区域中的控制器.在我创建了一个只返回视图的索引操作.然后我将索引视图添加到〜/ Areas/Some/Views/Thing/Index.cshtml

大.所以,当我点击/ Some/Thing/Index时,它会正确返回视图.

现在去添加一个到Global.asax的路由,如下所示:

routes.MapRoute(
                "Custom", // Route name
                "Bob", // URL with parameters
                new { area = "Some", controller = "Thing", action = "Index" }
                );
Run Code Online (Sandbox Code Playgroud)

现在,当我导航到/ Bob时,我得到了我提到的错误 - MVC找不到视图.要解决此问题,我必须在SomeAreaRegistration类中注册此路由,而不是Global.asax.我也不需要'area'属性,所以它看起来像这样.

    context.MapRoute(
        "Custom", // Route name
        "Bob", // URL with parameters
        new { controller = "Thing", action = "Index" }
        );
Run Code Online (Sandbox Code Playgroud)

  • 由于我试图集中路线注册的方式,我遇到了同样的问题.原来我也在RouteCollection而不是AreaRegistrationContext上调用MapRoute. (4认同)