布局页面“~/Views/Shared/index.cshtml”没有调用“RenderBody”方法
当前网络请求执行过程中出现未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。
如何解决这个错误
在我添加后的情况下
<div class="container body-content">
@RenderBody()
<hr />
<footer><p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
到共享布局的页脚,一切正常。发生这种情况是因为布局页面上
查看 -> 共享
还没有加载方法
@RenderBody()
所以你可以使用上面的代码片段摆脱这个或者你可以只评论相关cshtml页面顶部的布局。
请将此代码放在页面末尾的“正文”关闭标记之前
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
布局页面还没有调用“RenderBody”方法
这通常发生在您: – 有一个局部视图 – 使用 _ViewStart.cshtml 页面 – 你从你的控制器调用局部视图:return View();
然后你就错了。这是局部视图,所以你应该这样返回:
返回 PartialView();
来源:http://www.cloud-developer.eu/blog/2014/01/20/renderbody-method-called-layout-page/
我遇到了同样的问题,我的情况是我使用嵌套布局,你需要为所有_layout包含@RenderBody
我在我的 asp.net 核心 MVC 项目中处理 TagHelperComponent 时遇到了同样的错误。我在谷歌上搜索了很多,但每个人都有与我不同的问题,并且显然有与我不同的解决方案,例如多个布局文件等。让我解释一下我的问题 -
我正在制作一个 CopyRight TagHelperComponent,用于将我的版权内容(就在 body 结束标记之前)注入到我的应用程序的每个视图中,如下所示 -
public class CopyRightTagHelperComponent:TagHelperComponent
{
public CopyRightTagHelperComponent(string copyrightContent)
{
CopyrightContent = copyrightContent;
}
public string CopyrightContent { get; set; }
public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
if (context.TagName.Equals("body", StringComparison.OrdinalIgnoreCase))
{
output.Content.AppendHtml(CopyrightContent);
}
return Task.CompletedTask;
}
}
但是我相信你可以很好地在我上面的代码中找到问题。问题是,我试图错误地将我的版权内容注入 body 标签中(意味着不是在 body 结束标签之前,而是使用 Content 属性)。花了很多时间后,我发现我使用“Content”属性来附加我的内容,而不是 PreContent 或 PostContent 属性,这就是我的错误。
错误的原因只是,我试图用“内容”属性附加内容。将我下面的行代码从“Content”更改为“PostContent”,错误已修复 -
if (context.TagName.Equals("body", StringComparison.OrdinalIgnoreCase))
{
output.PostContent.AppendHtml(CopyrightContent);
}
重要节点:默认情况下,Tag Helper Components 仅对 head & body 元素进行操作。
为了使它们适用于页脚等其他元素,我们需要创建一个新的 Tag Helper(在页脚元素的情况下命名为 FooterTagHelper),它将派生自特殊类“TagHelperComponentTagHelper”。作为参考,请参阅以下来自 Microsoft 的代码 -
谢谢
最后,我找到了这个问题的答案,我遇到了同样的问题并且很容易解决它!转到您的视图文件夹创建_viewSrart.cshtml - 然后转到视图文件夹中的每个视图并删除或评论它( Layout = "~/Views/Home/Index.cshtml";) 它会起作用。稍后谢谢我
在我发布之前我一直收到这个错误我不小心在页面到达
return;
行之前留下了一个@RenderBody()
电话。