MVC3/Razor错误:未找到视图或其母版,也没有视图引擎支持搜索的位置。

3

我有一个名为“Admin”的区域。在Visual Studio中的文件夹结构如下:

Areas
   Admin
      Controllers
      Views

我有一个控制器叫做AccountController,在其中有一个名为Verify的操作。在这个操作中,我有如下一行代码:

return View("EmailVerificationComplete");

但是,我遇到了这个错误:
无法找到视图“EmailVerificationComplete”或其母版,也没有视图引擎支持搜索的位置。已搜索以下位置: ~/Views/Account/EmailVerificationComplete.aspx ~/Views/Account/EmailVerificationComplete.ascx ~/Views/Shared/EmailVerificationComplete.aspx ~/Views/Shared/EmailVerificationComplete.ascx ~/Views/Account/EmailVerificationComplete.cshtml ~/Views/Account/EmailVerificationComplete.vbhtml ~/Views/Shared/EmailVerificationComplete.cshtml ~/Views/Shared/EmailVerificationComplete.vbhtml
为什么会出现这种情况?为什么MVC不知道在相对于Admin区域的Views文件夹中查找?
我该如何解决这个问题?
谢谢, Sachin
5个回答

5

我遇到了同样的问题。我发现当你发送一个请求去执行某个动作时,即使url无效,mvc仍然会根据传入的url尝试匹配相应的动作。如果找到了匹配项(在我的情况下它会进入正确的控制器动作方法),就会被执行,但由于你传入的路径是错误的,系统无法找到相关联的视图。


1
是的,这个问题浪费了我最后的两个小时。在我的区域中找到了控制器操作,我可以很好地进行步进和调试控制器,但当它尝试呈现视图时,它没有在区域中解析,而是继续查看顶层。对我来说,这不是一件直观的事情,因为控制器可以在没有引用区域的情况下被解析,但视图却不能。 - cobolstinks

5
为什么MVC不知道要在相对于Admin区域的Views文件夹中查找?
因为你的AccountController不在Admin区域内。它可能在~/Controllers/AdminController.cs中,所以按照惯例ASP.NET MVC将在~/Views/Shared或~/Views/Account中寻找相应的视图。

这不是它。AccountController在Admin区域内。 - Sachin Kainth
4
@Sachin,你是如何请求这个控制器操作的呢?是通过/Admin/Account/Verify还是仅仅是/Account/Verify?如果你在URL中没有添加Area前缀进行请求,那么就好像AccountController在你的根目录中一样。 - Darin Dimitrov
嗯,这很奇怪。让我看看能否重现这个问题。 - Darin Dimitrov
1
无法重现。步骤:1.创建一个新的ASP.NET MVC 3应用程序。2.删除~/Controllers/AccountController.cs文件。3.右键单击项目,选择添加名为Admin的新区域。4.添加~/Areas/Admin/Controllers/AccountController.cs,其中包含以下操作:“public ActionResult Verify() { return View("EmailVerificationComplete"); }”。5.添加相应的~/Areas/Admin/Views/Account/EmailVerificationComplete.cshtml视图。6.运行应用程序并导航到/admin/account/verify。7.如预期所示,执行了管理区域中的AccountController并呈现了视图。 - Darin Dimitrov

3

对于我来说,我试图将一个简单的字符串传递给视图。这导致View()渲染了错误的重载版本,即View(string viewName),但我真正想要的是View(object model)。因此,解决方案就是将字符串强制转换为对象。或者我可以使用ViewBag而不向View()传递任何内容。


1

使用 return View(model:"EmailVerificationComplete");


5
为什么不详细阐述一下? - CinCout

1
我之前也遇到过这个错误... 在我的情况下,.csproj文件无意中被遗漏在合并到RELEASE分支的过程中,因此缺失的文件没有被索引到项目中。一旦.csproj被合并、重建和部署,该文件就能够被找到了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接