[英]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.