gpt4 book ai didi

c# - 如果在页面底部呈现捆绑脚本,我如何使用动态 JQuery 脚本定义部分 View ?

转载 作者:太空狗 更新时间:2023-10-29 21:33:59 26 4
gpt4 key购买 nike

我有一个使用 MVC4 和 Razor View 的 Web 应用程序,它使用了大量的 JQuery 和其他插件脚本。

为了加快 View 的渲染速度,我认为一般来说,将脚本渲染在正文底部是一种很好的做法,因此布局(更加统一)如下所示:

<body>
@RenderBody()

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/other")

@RenderSection( "Scripts", false )
</body>

Scripts 部分允许特定 View 添加额外的 JQuery 函数,并且它们保证在 JQuery 库之后呈现。到目前为止,还不错。

现在考虑 View 中的以下代码片段,它为集合中的每个项目呈现部分内容:

@foreach (var item in Model.Items)
{
Html.RenderPartial("_MyPartial", item);
}

此部分 (_MyPartial) 需要根据集合项详细信息呈现控件的 JQuery,例如以下代码段:

$(function () {
$("#@(Model.Id)").click(function () {
// do something when control on partial with id Model.Id is clicked
alert("I've been clicked!");
});
});

部分 View JQuery 函数不会执行,因为 JQuery 库不会在每个集合项的 _MyPartial 脚本之前加载。在 chrome 调试器中运行显示 $ not defined,这证实了这一点。

我可以做一些非常丑陋的事情,例如为所有调用部分的 View 复制脚本部分中的每个 foreach 语句,然后让父 View 生成脚本。但是,这实际上扼杀了局部 View 的可重用性。

有没有办法让 Razor 部分 View 脚本延迟呈现(例如在父脚本部分),或者有不同的方法来解决这个问题?

最佳答案

遗憾的是部分 View 不支持部分。一种可能性是编写自定义助手,如我在这篇文章中所示:https://stackoverflow.com/a/9663249/29407

这将允许您在文档末尾调用一个占位符帮助程序,它将呈现已在 partials 中注册的所有脚本。

话虽如此,将您的部分需要的客户端功能公开为 jQuery 插件通常是一个更好的主意。然后在一些 DOM 元素上调用这个插件就很容易了:

$('.someElement').somePlugin();

这样你就不再需要在你的部分中做任何 $("#@(Model.Id)") 了。部分通常不应包含任何脚本。

关于c# - 如果在页面底部呈现捆绑脚本,我如何使用动态 JQuery 脚本定义部分 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21504497/

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