为什么我的View不包含_Layout.cshtml?

时间:2011-10-14 12:29:10

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我最近对我的MVC 3项目进行了一些更改。

当我运行它时,Views不包含任何文件,如Site.css。 当我调试我的Index()ActionController时,它直接跳转到View,而不包括像_Layout.cshtml这样的文件。所以我只得到一个白色背景的视图,没有菜单等。

Global.asax.cs文件包含以下代码:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

    routes.MapRoute(
        "Default2", // Route name
        "{controller}/{action}/{id}/{page}", // URL with parameters
        new { controller = "Survey", action = "DisplayQuestions", id = "", page = "" }
    );
}

4 个答案:

答案 0 :(得分:44)

如果控制器操作中的断点被命中,则路由可能是错误的,但这不是_Layout.cshtml无法加载的原因。

要检查的一些事项:

  • 您的视图是使用View()而不是PartialView()(后者忽略了ViewStart.cshtml,因此忽略了_Layout.cshtml)。
  • 您最近是否移动了_Layout.cshtml /您是否重命名了Shared(或意外创建了SharedController)?
  • 您的视图是否在顶部包含了类似的内容,这会停用_Layout.cshtml?

    @{
        Layout = "";
    }
    
  • 您的_ViewStart.cshtml是否仍然存在以下代码,以激活_Layout.cshtml?

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    

答案 1 :(得分:2)

将“Default2”路线移到“默认”路线上方。

默认路由更通用,因此Default2应该是第一个

另外,在视图中确保您指定要使用的布局

@{
    Layout = "yourlayoutpage.cshtml"
}

答案 2 :(得分:1)

听起来你已经摆脱了索引视图中的布局属性。

@{
Layout = "~/Views/Shared/_Layout.cshtml"
}

答案 3 :(得分:-3)

我知道这已经解决但是对我来说(MVC 5)我必须在常规视图显示其内容之前添加这行代码

public ActionResult Index()
{
    return View();
}