【问题标题】:partial view was not found or no view engine supports the searched locations未找到部分视图或没有视图引擎支持搜索的位置
【发布时间】:2014-03-30 00:59:14
【问题描述】:

我有以下控制器代码:

public MyController:Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [ChildActionOnly]
    public ActionResult MyPartialViewAction()
    {
        return PartialView("~/Views/Shared/MyCustomFolder/_MyPartialView",PartialViewModel);
    }
}

我的索引视图有以下代码:

@HTML.Action("MyPartialViewAction")

当我运行 Web 应用程序时,我得到带有 InnerExceptionMessage 的 HttpException:

InnerException {"找不到局部视图 '~/Views/Shared/MyCustomFolder/_MyPartialView' 或没有视图引擎支持搜索的位置。搜索了以下位置:\r\n~~/Views/Shared/MyCustomFolder /_MyPartialView"} System.Exception {System.InvalidOperationException}

到目前为止我所尝试的:

  • 尝试将_MyPartialView~/Views/Shared/MyCustomFolder 移动到~/Views/Shared/~/Views/MyControllerFolder,但仍然存在错误

  • 尝试将我的索引视图代码更改为@HTML.RenderAction(),但没有成功。

关于我哪里出错的任何意见?

谢谢

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    希望这段代码对你有帮助(在 ".cshtml" 文件中)

    @using Microsoft.AspNetCore.Mvc.ViewEngines
    @inject ICompositeViewEngine Engine
    
    ....
    string path = "../Themes/User/_head";
    
    @if (Engine.FindView(ViewContext, path, isMainPage: false).Success)
    {
        <partial name="@path" for="@Model" />
    }
    else
    {
        <partial name="../Themes/Admin/_head" />
    }
    

    谢谢

    【讨论】:

      【解决方案2】:

      我收到此错误消息是因为部分视图已添加到项目文件 (.csproj) 但实际上并未出现在磁盘上。

      【讨论】:

        【解决方案3】:

        还要仔细检查文件名之后、“.cshtml”之前的空格。我不小心在我的文件名后面插入了一个空格,这破坏了 PartialView() 的自动行为。

        【讨论】:

          【解决方案4】:

          如果答案仍然不适合您,并且您已将部分放在部分内的嵌套文件夹中,请确保提供带有扩展名的部分的完整路径。

          @Html.Partial("~/Views/Partials/Components/_AdvancedComponentRenderer.cshtml", Model.Content);

          【讨论】:

            【解决方案5】:

            以防所选答案不适合您:

            我将 cshtml 文件的构建操作更改为 Content 并修复它。

            【讨论】:

            • 感谢 Sanvir,知道为什么在创建 cshtml 文件时我的构建操作设置为“无”。对我来说似乎有点奇怪的功能?
            • 这通常发生在我复制和粘贴 cshtml 文件而不是添加新文件时。
            • 同样的事情发生在我身上 - 文件以某种方式设置为嵌入式资源。将其改回 Content 并且它当然可以工作。
            • 对于不立即知道如何更改构建操作的任何人:右键单击文件 > 属性 > 构建操作 > 选择内容。 (确保您没有调试,因为下拉菜单将被禁用)
            • 这让我找到了正确的方向,但是将 cshtml 文件放在一个单独的项目中,我不得不将构建操作设置为 EmbeddedResource
            【解决方案6】:

            您需要在视图名称中添加 .cshtml 扩展名:

            return PartialView("~/Views/Shared/MyCustomFolder/_MyPartialView.cshtml",PartialViewModel);
            

            【讨论】:

            • 是的,它认为 Razor 会自动处理文件扩展名。谢谢@Maess
            • 我遇到了同样的问题。我想可能是因为我们使用了“~/Views”而不是默认路径,然后我们必须写出整个文件路径(包括扩展名),因为我们现在明确地使用了 View 的名称。
            猜你喜欢
            • 2015-04-24
            • 1970-01-01
            • 1970-01-01
            • 2013-06-23
            • 2013-08-18
            • 1970-01-01
            • 2017-03-09
            • 2015-07-09
            • 1970-01-01
            相关资源
            最近更新 更多