已定义以下部分但尚未为布局页面“〜/ Views / MasterPages / Default.cshtml”呈现:“标题”

时间:2017-04-07 11:15:58

标签: asp.net-mvc-4 razor

我收到Render部分的错误以下是错误的堆栈跟踪。 我已经在“Default.cshtml”页面中进行了交叉检查,我发现渲染部分是可选的,但我仍然收到此错误。

Default.cshtml:

<title>@RenderSection("Title",required: false)</title>

堆栈跟踪:

    System.Web.WebPages.WebPageBase : VerifyRenderedBodyOrSections The following sections have been defined but have not been rendered for the layout page "~/Views/MasterPages/Default.cshtml": "Title".    at System.Web.WebPages.WebPageBase.VerifyRenderedBodyOrSections()
       at System.Web.WebPages.WebPageBase.PopContext()
       at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
       at System.Web.WebPages.WebPageBase.<>c__DisplayClass7.<RenderPageCore>b__6(TextWriter writer)
       at System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)
       at System.Web.WebPages.WebPageBase.Write(HelperResult result)
       at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body)
       at System.Web.WebPages.WebPageBase.PopContext()
       at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
       at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
       at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
       at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
       at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17()
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
       at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1a.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
       at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
       at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult)
       at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
       at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
       at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
       at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
       at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
       at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
       at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
       at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult)
       at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
       at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
       at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
       at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
       at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

请建议我在哪里做错了。感谢。

1 个答案:

答案 0 :(得分:0)

错误特别是由定义该部分的视图引起的,即:

@section Title { ... }

但是,该部分从未被使用过。这只能意味着此特定视图未使用您的Default.cshtml布局,因为它实现了此部分。您需要弄清楚为什么它没有使用您认为应该的布局。以下是一些需要注意的事项:

  1. 除非您在视图中专门设置布局,否则它使用的布局将由最接近的_ViewStart.cshtml文件确定。 Razor将首先查看与相关视图相同的文件夹,然后从那里向上走Views目录树。检查该树中的所有_ViewStart.cshtml个文件。

  2. 如果您正在使用布局继承,则必须记住在每个布局中重新定义部分。例如,如果您要执行以下操作:

    <强> Default.cshtml

    @RenderSection("Title", required: false)
    

    <强> SubLayout.cshtml

    @{ Layout = "~/Views/Shared/Default.cshtml"; }
    

    <强> View.cshtml

    @{ Layout = "~/Views/Shared/SubLayout.cshtml"; }
    @section Title { ... }
    

    您会收到此错误,因为SubLayout.cshtml未实现该部分。要重新定义它,您只需要将以下内容添加到SubLayout.cshtml

    @section Title
    {
        RenderSection("Title", required: false)
    }