【问题标题】:Website won't execute _ViewStart.cshtml or find layout网站不会执行 _ViewStart.cshtml 或查找布局
【发布时间】:2015-09-01 22:58:13
【问题描述】:

我有两个环境:Dev 和 QA。两者都运行 Windows Server 2012 R2。我有一个 MVC 4 站点设置为现有经典 ASP 站点下的应用程序。 (现有的 ASP 站点没有自己的 Web.Config 文件。)

除了机器名称和 IP 地址之外,它们在 Dev 和 QA 中的配置完全相同。它们都运行完全相同的构建。

HomeController.cs 文件非常简单:

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

Index.cshtml 文件同样简单:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

/Views/_Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    @RenderBody()
</body>
</html>

/Views/_ViewStart.cshtml

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

在开发服务器上,当我访问我的站点时:http://dev/MySite/Home/Index/

它正确执行 _ViewStart.cshtml 并使用已定义的默认 _Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
<h2>Index</h2>
</body>
</html>

在 QA 服务器上,当我访问我的站点时:http://qa/MySite/Home/Index/

它只是呈现这个:

<h2>Index</h2>

我比较了 IIS 配置(甚至将它们导出为应用程序以查看 XML 中的设置,它们与计算机名称完全相同)。我编辑了 _Layout.cshtml_ViewStart.cshtml 以引发异常,但它们从未被执行。

让事情变得奇怪的是,如果我尝试通过在 QA 服务器上设置 Layout = "~/Views/Layout.cshtml"; 来手动设置视图中的布局,我会收到以下错误:

在以下路径中找不到布局页面“~/Views/_Layout.cshtml”:“~/Views/_Layout.cshtml”。

在 Dev 上,我可以通过这种方式手动设置布局,效果很好。

如果我在 Dev 和 QA 上执行 @Url.Content("~/Views/_Layout.cshtml"),我会得到以下输出:

/MySite/Views/_Layout.cshtml 

这可能是什么原因造成的?我们有其他 MVC 4 站点作为应用程序在同一网站下的这些服务器上运行,它们运行得非常好。

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    IT 部门将站点的匿名身份验证配置为使用特定用户帐户而不是应用程序池身份。不幸的是,安装新应用程序的文件夹没有为 QA 环境中的 IIS_IUSRS 提供权限。

    这允许网站继续中途工作并呈现视图,但它无法执行 _ViewStart.cshtml 或找到布局。

    【讨论】:

    • 我讨厌在写了这样一篇大文章后发现答案……至少其他人都可以从我们的错误中吸取教训。
    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2017-11-11
    • 2017-06-08
    • 2011-07-31
    • 2011-10-16
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多