为啥 Asp.Net MVC 不在我的共享目录中搜索视图?
Posted
技术标签:
【中文标题】为啥 Asp.Net MVC 不在我的共享目录中搜索视图?【英文标题】:Why is Asp.Net MVC not searching for a view in my Shared directory?为什么 Asp.Net MVC 不在我的共享目录中搜索视图? 【发布时间】:2011-10-03 05:03:29 【问题描述】:在我的/Views/Shared/
文件夹中,我创建了一个EntityNotFound.cshtml
剃刀视图。在我的一个控制器操作中,我有以下调用:
return View(MVC.Shared.Views.EntityNotFound, "Company");
这会导致以下异常:
System.InvalidOperationException:未找到视图“~/Views/Shared/EntityNotFound.cshtml”或其主视图,或者没有视图引擎支持搜索到的位置。搜索了以下位置:
~/Views/Company/Company.cshtml
~/Views/Company/Company.vbhtml
~/Views/Shared/Company.cshtml
~/Views/Shared/Company.vbhtml
我很困惑,因为它似乎甚至没有尝试搜索~/Views/Shared/EntityNotFound.cshtml
。即使我将MVC.Shared.Views.EntityNotFound
替换为"EntityNotFound"
,我也会遇到同样的错误。
为什么 Asp.Net MVC 甚至没有尝试找到我的共享视图?
【问题讨论】:
【参考方案1】:查看View();
的重载列表
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.view.aspx
具体来说,当您传递View(string,string);
时,它会将第二个字符串视为主视图的名称。
可能发生的事情是它找不到“公司”主视图,您不会看到异常消息说
...或找不到它的主人...
这意味着它可能正在寻找NotFoundException.cshtml
,但无法正确找到它正在寻找的作为主人的Company.cshtml
。
【讨论】:
啊,所以有一个字符串模型是个坏主意:) 确实,您可以通过将字符串模型类型转换为对象来欺骗系统...所以View("NotFoundException", (object)"Company");
【参考方案2】:
正确的语法应该是这样(不要传递路径,MVC 是约定俗成的语言)
return View("EntityNotFound");
假设“公司”是您要传递给视图的参数,请尝试如下:
ViewBag.ErrorEntity = "Company";
return View("EntityNotFound");
从视图中
<p>Entity not found: @ViewBag.ErrorEntity</p>
【讨论】:
以上是关于为啥 Asp.Net MVC 不在我的共享目录中搜索视图?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 SelectListItem 无法编辑 ASP.NET Core MVC
为啥我的 ASP.NET MVC 站点中的此 AJAX 请求会触发预检检查?
为啥我的 Jquery Ajax 调用不起作用?(Asp.net MVC C#)