繁体   English   中英

呈现asp.net MVC ChildAction时需要使用Javascript文件做什么

[英]What to do with Javascript files needed when rendering an asp.net MVC ChildAction

我对“子动作”进行了非常密集的调用,其中大量的c#代码在几个视图中只是通过以下方式调用:

@Html.RenderPartial("mychildAction")

现在,无论何时调用此操作,我都需要加载一些javascript文件。 我无法将标签内联(在视图内部),因为Jquery(和其他JS库)直到html页面结束才加载。

(主)_layout应该知道已调用此ChildAction。 但这不是因为子操作获得了新的HttpContext。

我想出的唯一解决方案是切换到部分代码(包括将大部分c#代码放入部分代码,并向HttpContext.Current.Items中保存的某些自定义对象添加一些字符串,并使我的_Layout正确执行)。 但是这样做将意味着我在此ChildAction上没有输出缓存,并且我在部分代码中引入了错误的做法,例如代码。

处理这种情况的最佳方法是什么?

视图负责渲染脚本,并且由于视图知道何时渲染部分视图,因此它知道何时渲染脚本。

在您的布局中,您可能会发现:

@RenderSection("scripts", required: false)

该视图可以在此处加载脚本,如下所示:

@section Scripts
{
    @Scripts.Render("~/bundles/SomeBundle")
}

这允许调用视图呈现脚本。

从局部视图或子视图渲染脚本是不可能的

您可能会找到一些有关如何从局部视图渲染脚本的变通方法,但是通常,视图负责了解要加载的脚本。

编辑

我见过的一些解决方法在这里

您可以使用以下命令从调用操作访问HttpContext

Html.ViewContext.ParentActionViewContext

因此,可以在其中添加一些东西到“ Items”集合中,这种方法可以解决这个特殊的问题,但是我仍然想知道这是否是最好的方法。

我同意@Odys

_Layout.cshtml

@RenderSection("scripts", required: false)

儿童观

@{
    Layout = "~/Views/Share/_Layout.cshtml"
}
@section scripts
{
    <script></script>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM