【问题标题】:MVC 4 Intranet application, multiple layoutMVC 4 Intranet 应用程序,多种布局
【发布时间】:2013-12-04 18:06:09
【问题描述】:

我在开发 MVC4 Intranet 应用程序时遇到错误,尝试使用多个页面布局。如我所见,使用 Internet 应用程序时不存在此问题,这里是快速演示。

使用 Razor 引擎创建新的 Internet 应用程序。将文件 _Layout.cshtml 复制到 Popup_Layout.cshtml(都在 ~/Views/Shared 中),并去除 Popup_Layout 中的页眉和页脚部分。在 ~/Controllers/HomeController.cs 中使用以下代码修改 Index 操作:

    public ActionResult Index()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

        string layout = "_Layout";

        if (DateTime.Now.Ticks % 2 == 1)
        {
            layout = "Popup_Layout";
        }

        return View("Index", layout);
    }

这创建了一个简单的游戏,它随机选择使用两种可用页面布局中的一种。编译和测试后,在浏览器中刷新我们可以看到有或没有页眉和页脚部分的起始页。

现在,如果我们重复完全相同的场景,唯一的区别是项目是 Intranet 应用程序 - 构建正常,但是在浏览器中刷新而不是获取没有页眉和页脚的页面,我们会收到服务器错误,堆栈跟踪的顶部说:

    [InvalidOperationException: The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
    ~/Views/Home/Index.aspx
    ~/Views/Home/Index.ascx
    ~/Views/Shared/Index.aspx
    ~/Views/Shared/Index.ascx
    ~/Views/Home/Popup_Layout.master
    ~/Views/Shared/Popup_Layout.master
    ~/Views/Home/Popup_Layout.cshtml
    ~/Views/Home/Popup_Layout.vbhtml
    ~/Views/Shared/Popup_Layout.cshtml
    ~/Views/Shared/Popup_Layout.vbhtml]
    System.Web.Mvc.ViewResult.FindView(ControllerContext context) +399386

作为替代方案,可以通过将 ~/Views/Shared/Popup_Layout.cshtml 分配给 Layout 属性在 View 本身中确定布局,但它也会引发错误。

我没有找到使用网络的解决方案,所以我希望有人可以在这里帮助我。谢谢

【问题讨论】:

  • 你删除了Index.chtml,但你仍然在View()返回中调用它。
  • "现在如果我们重复完全相同的场景,唯一的区别是项目是 Intranet 应用程序......" 你有两个单独的项目吗?
  • 尝试删除 Popup_Layout.cshtml,然后为 Popup_Layout 创建一个新的空视图页面,而不是复制粘贴 _Layout.cshtml。在您拥有一个新的空视图页面后,复制粘贴内容(如果您愿意)。我不知道为什么,但我在我的测试项目中尝试过它并且它有效。我使用的是常规 Web 应用程序(不是 Intranet 应用程序),但遇到了与您描述的相同的缺少视图错误。
  • 视图引擎不在寻找index.cshtml,但它在寻找Popup_Layout.cshtml。对我来说听起来像是一个错误,或者 Razor View Engine 没有正确注册。尝试使用以下代码编辑 global.asax 文件:ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine());
  • @Jasen - 谁知道为什么,但似乎通过不同的创建改变视图解决了这个问题:-)

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


【解决方案1】:

尝试删除 Popup_Layout.cshtml,然后为 Popup_Layout 创建一个新的空视图页面,而不是复制粘贴 _Layout.cshtml。在您拥有一个新的空视图页面后,复制粘贴内容(如果您愿意)。我不知道为什么,但我在我的测试项目中尝试过它并且它有效。我使用的是常规 Web 应用程序(不是 Intranet 应用程序),但遇到了与您描述的相同的缺少视图错误。

我认为关键是视图文件的创建方式。我复制了文件并重命名了它,并看到了同样的错误。当我正确地创建了一个新视图,然后将其复制到内容中时,一切正常。

【讨论】:

    【解决方案2】:

    亲爱的 noviKorisnik,我尝试按照您在此处编写的内容复制您的错误,但我没有收到您指定的错误。 你的错误第一行是 未找到视图“索引”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下位置: ~/Views/Home/Index.aspx

    我相信您错误地删除了 index.cshtml 。 请确保您在正确的文件夹中有 index.cshtml。如果您仍然收到错误,请提供更多详细信息。

    【讨论】:

    • 您可以在 cmets 中找到我的问题,问题可能出在创建更改布局的方式上。我将对此进行更多检查,看起来很奇怪,但如果解决了 - 太好了:-)
    • @noviKorisnik 如果你能提供我你的代码也许我能解决你的问题。
    • 问题已解决,谢谢。似乎编译器或其他 VS 内部存在一些错误,引用了重命名的文件,所以现在我避免重命名文件并且一切正常:-)
    猜你喜欢
    • 1970-01-01
    • 2018-07-09
    • 2019-09-06
    • 1970-01-01
    • 2017-01-24
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多