MVC Razor @section doesn't understand Scripts

匿名 (未验证) 提交于 2019-12-03 08:46:08

问题:

I have:

  • VS 2013
  • MVC 5.2.2
  • Razor 3.2.2

Let me know if there's anything else you need to know.

This problem only happens on one view page.

I have a View with all HTML tags closed off properly

It's your standard view...

@model MyNameSpace.Models.Inquiry  @{     var hasFormSetup = Model != null && Model.FormSetup != null && Model.FormSetup.Count > 0;     if (hasFormSetup)     {         ViewBag.Title = Model.FormSetup[0].InquiryValue;     }     Layout = "~/Views/Shared/_LayoutInquiry.cshtml"; }  <style scoped>     ul {         list-style-type: none;     } </style>  @using (Html.BeginForm()) {     @Html.AntiForgeryToken()      <div class="container" style="margin-top: 5px;">         etc...     </div>     <div class="container" >         etc...     </div>  }   @section Scripts {      <script type="text/javascript">              $(document).ready(function () {      etc...              });       </script> } 

but...

on the line

@section Scripts 

Resharper reports: "Cannot resolve section Scripts"

When I run, I get the exception:

Source: System.Web.WebPages Target: Void VerifyRenderedBodyOrSections() Type:   HttpException Message:    The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_LayoutInquiry.cshtml": "Scripts". Stack:     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__DisplayClass3.<RenderPageCore>b__2(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)    etc... 

No other page has this issue.

Any ideas as to how I can fix this?

回答1:

The exception message says:

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_LayoutInquiry.cshtml": "Scripts".

This suggests that your _LayoutInquiry.cshtml page does not setup a placeholder for a Scripts section. You can do this by adding @RenderSection("Scripts", false) to your layout page in the appropriate location, where the false indicates that views may optionally supply this section.

Now, when your view renders, the contents of @section Scripts { ... } in your view will be rendered into the location of the @RenderSection("Scripts", false) call in your layout page.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!