已定义以下部分但尚未为布局页面“〜/ Views / Shared / _Layout.cshtml”呈现

时间:2017-08-21 11:59:07

标签: c# asp.net-mvc-4 razor

我有这个ActionResult:

[EncryptedActionParameter]
[CheckExternalUserRegisterSigned]
public ActionResult ExpedienteIIT(int idExpediente)
{
    ExpedienteContainerVM model = this.GetExpedienteVMByIdExpediente(idExpediente);
    return View("ExpedienteIIT", model);
}

ExpedientIIT查看: https://jsfiddle.net/pq16Lr4q/

_Layout.cshtml: https://jsfiddle.net/1ksvav43/

所以当我返回视图时,我收到了这个错误:

enter image description here

我尝试将console.logs放入以查看视图是否已呈现但未呈现...

好的错误在这里:

@model PortalSOCI.WEB.ViewModels.IIT.ExpedienteContainerVM


    @{
        ViewBag.Title = String.Format(PortalSOCI.WEB.Resources.ExpedienteIIT.TituloExpedienteIIT, Model.Expediente.NumeroExpediente);
    }

    @section JavaScript  /// <-------------------- ERROR
    {
        @Html.Raw(ViewBag.message)
    @
你能帮我吗?

2 个答案:

答案 0 :(得分:2)

您需要将遗失的部分放在ExpedienteIIT视图中。根据错误消息,该缺失部分为JavaScript

代码示例,将其放在视图的底部:

@section JavaScript
{
    // put javascript here
}

修改

感谢您提供视图的代码示例。布局页面中的JavaScript部分如何定义以及如何将其包含在视图中之间存在不匹配。

要解决此问题,请执行以下任一操作:

  • 在您的_Layout页面中,将@RenderSection("scripts", required: false)更改为@RenderSection("JavaScript", required: false),或
  • ExpedienteIIT视图中,将@section JavaScript更改为@section scripts

重要的是两者应该匹配。

答案 1 :(得分:1)

编辑: 阅读完代码后,我觉得

@RenderSection("scripts", required: false)

应该是

@RenderSection("JavaScript", required: false)
另一件我认为会给你带来麻烦的事情就是你定义了你的#34; JavaScript&#34;身体的一部分。这意味着如果您的任何视图忘记添加

@section JavaScript
{
    @Html.Raw(ViewBag.message)
}

您将收到Section JavaScript not defined错误。在您的情况下,感觉该部分的定义应该在_layout.cshtml

此错误很可能意味着您已定义JavaScript部分但未在任何位置呈现它。 您需要在layout.cshtml中的某处调用@RenderSection("JavaScript")

@section JavaScript
{
}

将允许您创建一个名为&#34; JavaScript&#34;的部分,但实际上&#34; print&#34;将此部分的内容输出到输出HTML文件(将发送到客户端),您需要调用@RenderSection("JavaScript")。该部分的内容将打印在RenderSection的电话所在位置。