【问题标题】:MVC3/Razor Error: The view or its master was not found or no view engine supports the searched locationsMVC3/Razor 错误:未找到视图或其主控,或者没有视图引擎支持搜索到的位置
【发布时间】:2012-02-14 03:11:08
【问题描述】:

我有一个名为 Admin 的区域。 Visual Studio 中的文件夹结构是这样的:

Areas
   Admin
      Controllers
      Views

我有一个名为 AccountController 的控制器,其中有一个名为 Verify 的 Action。我在这个动作中有这行代码:

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 文件夹?

我该如何解决这个问题?

谢谢,

萨钦

【问题讨论】:

    标签: c# asp.net-mvc-3 razor asp.net-mvc-routing


    【解决方案1】:

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

    【讨论】:

    • 你为什么不详细说明?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我之前遇到过这个错误...在我的情况下,碰巧 .csproj 文件无意中被排除在与 RELEASE 分支的合并之外,因此没有将丢失的文件索引到项目。一旦 .csproj 被合并、重建和部署,就可以找到该文件。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。 我发现当您发送某个操作的请求时,即使 url 无效,mvc 也会尝试根据传入的 url 为您匹配操作。如果找到匹配项,(在我的情况下,它会正确控制器动作方法),被执行了,但是因为你传入的路径错误,所以找不到关联的视图。

        【讨论】:

        • 是的,这只是浪费了我最后的 2 个小时。找到了我所在区域的控制器操作,我可以很好地单步调试控制器,当它渲染视图时,它并没有尝试在该区域解决它,而是继续查看顶层。对我来说,在没有引用区域的情况下可以解析控制器并不直观,但视图不能
        【解决方案5】:

        为什么 MVC 不知道查看相对于管理区域的 Views 文件夹?

        因为您的AccountController 不在Admin 区域内。它可能在 ~/Controllers/AdminController.cs 中,因此按照惯例 ASP.NET MVC 将在 ~/Views/Shared~/Views/Account 中查找其对应的视图。

        【讨论】:

        • 不是这样的。 AccountController 位于管理区域内。
        • @Sachin,您是如何请求此控制器操作的?是/Admin/Account/Verify 还是只是/Account/Verify?如果您在 url 中没有 Area 前缀请求它,那么就好像 AccountController 在您的根目录中一样。
        • 嗯,这很奇怪。让我看看能不能重现这个问题。
        • 无法重现。步骤: 1. 创建一个新的 ASP.NET MVC 3 应用程序。 2. 删除~/Controllers/AccountController.cs 文件。 3. 右键单击​​项目并选择添加名为 Admin 的新区域。 4. 使用以下操作添加~/Areas/Admin/Controllers/AccountController.cspublic ActionResult Verify() { return View("EmailVerificationComplete"); }。 5、添加对应的~/Areas/Admin/Views/Account/EmailVerificationComplete.cshtml视图。 6. 运行应用程序并导航到/admin/account/verify。 7. 正如预期的那样,管理区域中的 AccountController 被执行并呈现视图。
        猜你喜欢
        • 2013-08-18
        • 2013-06-23
        • 2015-07-09
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多