Asp.net mvc 未找到局部视图,或者没有视图引擎支持搜索的位置
我有以下控制器代码:Asp.net mvc 未找到局部视图,或者没有视图引擎支持搜索的位置,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我有以下控制器代码: public MyController:Controller { public ActionResult Index() { return View(); } [ChildActionOnly] public ActionResult MyPartialViewAction() { return PartialView("~/Views/Shared/MyCustomFolder/_MyPar
public MyController:Controller
{
public ActionResult Index()
{
return View();
}
[ChildActionOnly]
public ActionResult MyPartialViewAction()
{
return PartialView("~/Views/Shared/MyCustomFolder/_MyPartialView",PartialViewModel);
}
}
“我的索引”视图具有以下代码:
@HTML.Action("MyPartialViewAction")
当我运行Web应用程序时,我得到HttpException和InnerExceptionMessage,如下所示:
InnerException{“未找到部分视图'~/Views/Shared/MyCustomFolder/\u MyPartialView',或者没有视图引擎支持搜索的位置。搜索了以下位置:\r\n~~/Views/Shared/MyCustomFolder/\u MyPartialView}系统。异常{System.invalidoctionException}
到目前为止,我一直在尝试:
- 尝试将
从\u MyPartialView
移动到~/Views/Shared/MyCustomFolder
和~/Views/Shared/
,但仍然存在错误~/Views/MyControllerFolder
- 尝试将我的索引视图代码更改为
,但没有成功@HTML.RenderAction()
谢谢您需要将.cshtml扩展名添加到视图名称中:
return PartialView("~/Views/Shared/MyCustomFolder/_MyPartialView.cshtml",PartialViewModel);
以防所选答案对您无效:
我将cshtml文件的生成操作更改为Content,并将其修复。如果答案仍然不适用于您,并且您已将您的分部放入分部内部的嵌套文件夹中,请确保提供分部的完整路径和扩展名
@Html.Partial(“~/Views/Partials/Components/\u AdvancedComponentRenderer.cshtml”,Model.Content)代码>还要仔细检查文件名后面“.cshtml”前面的空格。我在文件名后意外插入了一个空格,这破坏了PartialView()的自动行为。我收到此错误消息,因为部分视图已添加到项目文件(.csproj)中,但实际上不在磁盘上。希望,此代码可以帮助您(在.cshtml“文件中)
@使用Microsoft.AspNetCore.Mvc.ViewEngines
@注入ICompositeViewEngine引擎
....
字符串路径=“../Themes/User/_head”;
@if(Engine.FindView(ViewContext,path,isMainPage:false).Success)
{
}
其他的
{
}
谢谢是的,我想Razor会自动处理文件扩展名。谢谢@MaessI也有同样的问题。我想可能是因为我们使用了“~/Views”而不是默认路径,然后我们必须写出整个文件路径(包括扩展名),因为我们现在已经显式地使用了视图的名称。感谢Sanvir,知道为什么在创建cshtml文件时,我的构建操作设置为“None”吗。对我来说,这似乎有点奇怪的功能?这通常发生在我复制和粘贴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" />
}