gpt4 book ai didi

c# - 如何更改 ScriptManager 中已注册脚本的顺序

转载 作者:太空狗 更新时间:2023-10-29 19:39:38 30 4
gpt4 key购买 nike

背景

在我们的母版页中,我们有一个看起来像这样的 ScriptManager

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="False" EnableScriptLocalization="true">
<Scripts>
<asp:ScriptReference Path="~/js/master.js" />
<asp:ScriptReference Path="~/js/jquery-min.js" />
</Scripts>
</asp:ScriptManager>

我通过执行以下操作在页面上的嵌套控件中注册其他脚本

protected override void OnPreRender(EventArgs e)
{
ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "jquery-ui", "~/js/jquery-ui.js");
base.OnPreRender(e);
}

预计

  1. master.js
  2. jquery-min.js
  3. jquery-ui.js *

实际

  1. jquery-ui.js *
  2. master.js
  3. jquery-min.js

问题

有什么办法可以改变注册脚本的加载顺序吗?

- 或 -

是否有可能至少确保在实际 ScriptManager block 中注册的脚本先于代码隐藏注册脚本注册?

最佳答案

深入研究 ScriptManager 源代码后,我们可以得出两个有用的结论:

  • 添加到管理器的脚本会按照它们出现在集合 ScriptManager.Scripts 中的顺序在页面上逐个注册(如果您好奇 - 通过方法 ClientScript.RegisterClientScriptBlock ,而不是在 Render 方法或类似的东西中)。

  • 标记中声明的脚本将在 ScriptManager 对象创建时添加到集合 ScriptManager.Scripts

因此有一种方法可以

ensure the scripts that are registered in the actual ScriptManager block are registered prior to code-behind registered scripts

是将控件中的脚本直接添加到ScriptManager.Scripts 集合中,而不是使用ScriptManager 类的静态实用方法。控件的代码示例如下:

protected override void OnPreRender(EventArgs e)
{
ScriptManager currentScriptManager = ScriptManager.GetCurrent(this.Page);
if (currentScriptManager != null)
{
ScriptReference scriptRef = new ScriptReference("~/js/jquery-ui.js");
currentScriptManager.Scripts.Add(scriptRef);
}
else
{
this.Page.ClientScript.RegisterClientScriptInclude(
this.GetType(), "jquery-ui", "js/jquery-ui.js");
}

base.OnPreRender(e);
}

一个小提示 - 如代码示例中所示,我建议在页面上没有 ScriptManager 时处理大小写。

关于c# - 如何更改 ScriptManager 中已注册脚本的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121251/

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