我在开发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
作为替代方案,可以在View中确定布局,并将〜/ Views / Shared / Popup_Layout.cshtml赋值给Layout属性,但它也会抛出错误。
我没有使用网络找到解决方案,所以我希望有人可以帮助我。感谢
答案 0 :(得分:1)
尝试删除Popup_Layout.cshtml,然后复制粘贴_Layout.cshtml,为Popup_Layout创建一个新的空视图页面。在您有一个新的空视图页面后,复制粘贴内容(如果您愿意)。我不知道为什么,但我在我的测试项目上尝试了它并且它有效。我使用的是常规网络应用程序(不是内联网应用程序),但我遇到了您描述的相同缺失视图错误。
我认为关键是视图文件的创建方式。我复制了文件并将其重命名并看到了同样的错误。当我正确创建一个新视图然后复制到内容中时,它都能正常工作。
答案 1 :(得分:0)
亲爱的noviKorisnik我试图按照你在这里写的那样复制你的错误,但我没有得到你指定的错误。 你的错误第一行是 未找到视图“索引”或其主数据或视图引擎不支持搜索的位置。搜索了以下位置: 〜/查看/主页/的Index.aspx
我误认为你删除了index.cshtml。 请确保您在右侧文件夹中有index.cshtml。如果您仍然收到错误,请提供更多详细信息。