【问题标题】:The following sections have been defined but have not been rendered for the layout page "~/Views/MasterPages/Default.cshtml": "Title"以下部分已定义但尚未为布局页面“~/Views/MasterPages/Default.cshtml”呈现:“标题”
【发布时间】:2017-04-07 11:15:57
【问题描述】:

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

默认.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)

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

【问题讨论】:

    标签: asp.net-mvc-4 razor


    【解决方案1】:

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

    @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)
      }
      

    【讨论】:

    • 我没有使用 _viewStart.cshtml 并在每个页面和部分标题上添加布局。但是我发现了一个部分视图,其中提到了部分标题作为其部分我没有使用布局。所以请建议我这可能会导致问题并产生这个问题。
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多