ScriptManager.RegisterClientScriptIninclude 在 UpdatePanel 中不起作用

2023-12-21

我已浏览网络,但尚未找到以下问题的解决方案。我有这个示例页面(_ScriptManager.aspx)ScriptManager, an UpdatePanel, a MultiView有两个Views和两个LinkButtons两个视图之间切换。第二个视图包含一些我想要为其加载 JavaScript 文件(_ScriptManager.js)的功能。

由于我不知道用户是否会访问视图 2,因此我不想为每个请求静态包含 javascript 文件。我只想在需要时加载它。所以我需要在异步回发期间包含脚本文件,这就是我使用的ScriptManager.RegisterClientScriptInclude为了。痛苦是:它不起作用。脚本 include 不知何故未在客户端执行,因此无法使用其中的 javascript 函数。更糟糕的是,我注册的脚本块ScriptManager.RegisterStartupScript在这种情况下不会被执行!这一切都非常令人恼火。有趣的是,包含脚本和脚本块确实通过异步回发发送到客户端(Fiddler 是我的朋友:-)),并且脚本文件也被加载。但后来 JavaScript 似乎以某种方式崩溃了......

有人知道或知道报告的错误吗?

_ScriptManager.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="_ScriptManager.aspx.cs" Inherits="Frontend.Web._Tests.ScriptManagerTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title></title>
  <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js"></script>
</head>
<body>
  <form id="form1" runat="server">
    <asp:ScriptManager runat="server" ID="scm"></asp:ScriptManager>
    <asp:Label runat="server" ID="lbOut">Outside of UpdatePanel</asp:Label>
  <div style="border: solid 1px red;">
      <asp:UpdatePanel runat="server" ID="up" UpdateMode="Conditional">
        <ContentTemplate>
          <div>
            <asp:LinkButton runat="server" ID="btnFirst">Show view 1</asp:LinkButton>
            <asp:LinkButton runat="server" ID="btnSecond">Show view 2</asp:LinkButton>
          </div>
          <div>
            <asp:MultiView runat="server" ID="mv">
              <asp:View runat="server" ID="vw1">First view - static content</asp:View>
              <asp:View runat="server" ID="vw2">
                Second view - dynamically loaded content (between dashes): 
                <div>#<span id="divDyn"></span>#</div>
              </asp:View>
            </asp:MultiView>
          </div>
        </ContentTemplate>
      </asp:UpdatePanel>
  </div>
  </form>
</body>
</html>

_ScriptManager.js(这里我只是用 id=divDyn 添加一些动态内容到 span 中):

function dynamic() {
  alert('dynamic');
  $('#divDyn').text('Dynamic!');
}

_ScriptManager.aspx.cs代码隐藏:

public partial class ScriptManagerTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        btnFirst.Click += delegate { mv.SetActiveView(vw1); };
        btnSecond.Click += delegate { mv.SetActiveView(vw2); };

        if (!IsPostBack)
        {
            // Test 1: does not work
            mv.SetActiveView(vw1);

            // Test 2: works, because required script is loaded on initial page request
            //mv.SetActiveView(vw2);
        }
    }

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        if (mv.GetActiveView() == vw2)
        {
            // Not calling the RegisterClientScriptInclude
            // makes the alert work in both cases, but this is
            // what it's all about: including script only when
            // needed!
            ScriptManager.RegisterClientScriptInclude(
                Page, Page.GetType(), "include-js",
                ResolveClientUrl("~/ScriptManager.js"));
            ScriptManager.RegisterStartupScript(
                this, GetType(), "call-dynamic",
                "alert('hi there'); dynamic();", true);    
        }
    }
}

好吧,这太令人震惊了:经过两个 2 小时的会议调查问题,尝试了 ScriptManager 的所有可能性,尝试使用 jQuery 来代替,最后编写了这个示例(因为现实世界的设置总是更复杂),我现在找到了这篇简短的博文 http://siderite.blogspot.com/2009/01/including-external-javascript-on-async.html这解决了我的问题 - 在 js 文件中添加一行:

_ScriptManager.js:

function dynamic() {
  alert('dynamic');
  $('#divDyn').text('Dynamic!');
}
// notify that the script has been loaded <-- new!
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

好吧,也许这对其他人来说会有用......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ScriptManager.RegisterClientScriptIninclude 在 UpdatePanel 中不起作用 的相关文章

随机推荐

  • 如何在 recyclerview 中创建带有数字和字母气泡的自定义滚动条等材质设计

    在许多新的 Android 应用程序及其最新更新中 这些应用程序 主要是材料设计 都有一个带有字母和数字的自定义滚动条 同时用拇指滚动滚动条 字母或数字出现在拇指旁边 我已将屏幕截图附加到滚动条的问题应用程序 联系人 Screenshot
  • 任务完成后才显示进度条

    我一直在尝试将进度条设置为选框 以便在另一个功能运行时继续移动 该函数运行后 我会显示消息 对于本例 我能够完成这项工作的唯一方法是与后台工作人员一起工作 然后有一个 做 循环直到在主窗体中运行的条件 直到操作完成 然后是我的消息框 这似乎
  • 我应该在 Redux App 中哪里处理排序?

    我有一个动作 减速器 组件 在我的一个组件 组件转储 中 我有一个选择 我获得有关我的商店的过滤器类型的信息 我可以在action或reducer中在哪里处理它 IMO 对数据进行排序的正确位置不是直接在减速器中 而是在选择器 来自 red
  • 识别 C/C++ 中未使用的函数 [重复]

    这个问题在这里已经有答案了 可能的重复 在大型 C 遗留应用程序中查找 死代码 https stackoverflow com questions 2380153 finding dead code in a large c legacy
  • wpf 组合框 selectedIndex=0 不起作用

    xaml
  • 什么时候可以将结构安全地散列为字节数组?

    对于相等意味着每个数据成员的相同的最派生类型和字节相等的结构 何时 如果有 可以将该结构安全地散列为字节数组 这个文件 http www open std org jtc1 sc22 wg21 docs papers 2012 n3333
  • 诗歌配置无效 - 不允许附加属性(“组”是意外的)

    最近 我在诗歌方面遇到了这个问题 我所有使用诗歌的命令都失败并出现以下错误 RuntimeError The Poetry configuration is invalid Additional properties are not all
  • 如何从 torrent 跟踪器响应中获取对等列表

    我正在制作一个种子客户端 我解码 torrent 文件并将此请求发送到跟踪器 http tracker mininova org announce uploaded 0 downloaded 0 compact 0 event starte
  • 为什么函数式语言如此大量地使用列表?

    我的意思是 列表相对于其他数据结构有哪些优势 使其在函数式语言中几乎不可避免 没有勺子 如果我告诉你没有字符串这样的东西怎么办 仅存在单个字符的列表 那么如果我告诉你不存在列表这样的东西呢 仅存在对 construct a pair of
  • Visual Studio Code 无法在 WSL 2 上运行/工作

    不知怎的 当我跑步时code 在 WSL 内部 它根本不执行任何操作 如果我which code它确实返回了 Windows 上的 VS Code 路径 但仍然没有任何反应 经过一番研究 真正解决我问题的是 在 WSL 终端中 运行rm r
  • 用于返回合格子节点值的字符串串联的 XPath

    任何人都可以建议一种 XPath 表达式格式 该格式返回一个字符串值 其中包含元素的某些合格子节点的串联值 但忽略其他值 div This text node should be returned em And the value of t
  • UIGestureRecognizer 导致循环保留?

    我在想 如果你将目标指定为self在手势识别器中initWithTarget action 方法 会引起循环retain吗 自从self将保留识别器self gestureRecognizers并且手势识别器也有可能将自身保留在initWi
  • 在类方法中使用 self

    我在 ShareKit 中遇到了这段代码 我不明白作者的想法 使用self在类方法中 有警告 不兼容的指针类型将 Class 发送到参数类型id
  • 用户在权限屏幕上单击“允许”后启动活动

    我的一项活动需要位置许可 我编写了下面的代码来获得许可 但在这种情况下 如果应用程序最初没有位置权限 则用户需要单击两次才能打开活动 我可以进行一些更改 以便一旦用户在 权限 屏幕上单击 允许 只有然后意图才会触发 int PERMISSI
  • 我无法将信息从表单输入到数据库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么它们不起作用以及预期结果 也可以看看 Stack Over
  • 如何检查 keras 训练是否已经在 GPU 中运行?

    有时我会犯一个错误 尝试在同一个 GPU 两个不同的脚本 中使用 keras 同时运行两个训练 导致我的机器崩溃或破坏两个训练 我希望能够在我的脚本中测试是否有一些训练正在运行 因此可以更改 GPU 或停止新的训练 我发现寻找答案的唯一提示
  • 无法在 vba IE 中应用正则表达式

    我使用vba结合IE编写了一个脚本来解析应用程序网页中的联系信息regex在上面 我进行了很多搜索 但找不到任何可以满足我的要求的示例 这pattern可能并不理想地找到phone号 但这里主要关心的是我如何使用pattern在 vba I
  • 在 C# 中解析原始 Protocol Buffer 字节流

    给定一个协议缓冲区编码Stream or byte 但不知道对象类型本身 我们如何打印消息的骨架 该用例用于调试基于 protobuf 的 IO 以进行根本原因分析 如果有现有的工具可以从二进制文件中解析原始 Protocol Buffer
  • 如何滚动到英国底部?

    我使用 PhoneGap 开发了一款应用程序 在我的应用程序中 我使用在列表视图中显示了许多元素ui li 这里我想滚动到列表中的最后一个元素 为此 我使用了以下代码 dates li last addClass active li foc
  • ScriptManager.RegisterClientScriptIninclude 在 UpdatePanel 中不起作用

    我已浏览网络 但尚未找到以下问题的解决方案 我有这个示例页面 ScriptManager aspx ScriptManager an UpdatePanel a MultiView有两个Views和两个LinkButtons两个视图之间切换