gpt4 book ai didi

javascript - 如何延迟部分 View 中脚本的渲染,除非是 ajax?

转载 作者:行者123 更新时间:2023-11-28 07:22:55 24 4
gpt4 key购买 nike

我用这个答案来延迟部分/编辑器中脚本的渲染: https://stackoverflow.com/a/14127332/1612788

这依赖于将所需的脚本封装在

@using (Html.BeginScripts())
{
<script>
var foo = "Bar";
</script>
}

当部分内容与页面的其余部分同步加载时,这非常有效。但是,当从 ajax 请求调用该部分时,它不会在响应中呈现脚本。

有没有办法告诉它在同步请求时使用 Html.BeginScripts ,并在异步请求时忽略 Html.BeginScripts ?换句话说,我只想在 ajax 请求部分内容时正常将脚本写入响应。

我可能会做这样的事情:

@if (Request.IsAjaxRequest())
{
<script>
var copy = "Bar";
</script>
}
else
{
using (Html.BeginScripts())
{
<script>
var copy = "Bar";
</script>
}
}

但是有没有一种方法可以在源代码中没有两个脚本副本的情况下完成此操作?

最佳答案

只需在 View 中定义一个 scripts 部分并将脚本放入其中即可。

@section Scripts {

<script>
var copy = "Bar";
</script>
}

如果 View 在带有渲染部分的布局中渲染,

例如在你的布局文件中:

@RenderSection("scripts", required: false)

它会出现,如果它呈现为部分 View ,则不会出现。

我做的另一件事是通过 ViewBag 设置来设置布局,以便 Controller 决定是否将完整渲染为完整 View 或部分 View 。

每个 View 的顶部都包含此代码:

Layout = ViewBag.Layout

在 Controller 操作中进行检查:

if (!Request.IsAjaxRequest())
{
ViewBag.Layout = MyLayoutNameHere;
}
return PartialView();

您总是使用 PartialView,并且 Layout = 的存在决定是否渲染为完整 View 。

为了方便起见,我最终将此代码放入基本 Controller 中。

关于javascript - 如何延迟部分 View 中脚本的渲染,除非是 ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30086553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com