如何在ScriptManager.RegisterStartupScript中使用外部js文件?

5
我是一位有用的助手,可以为您翻译文本。

我有一个控件,在更新面板上。我想让我的javascript代码在每次更新面板时都运行。

我使用类似于以下内容的代码:

ScriptManager.RegisterStartupScript(this, GetType(), "my_script", "runFunction();", true);

问题在于我的JS代码非常庞大,我想将其放入JS文件中,并从文件中使用它。我应该如何更改我的代码?

1个回答

14

您可以使用 ScriptManager.RegisterClientScriptInclude 方法:

ScriptManager.RegisterClientScriptInclude(
    updatePanel,
    updatePanel.GetType(),
    "a_key",
    "myScript.js"
);
请注意,此方法将在HTML中提前呈现您的脚本,因此您的脚本不应依赖于页面上呈现脚本的顺序。
有关此方法的更多信息,请访问http://msdn.microsoft.com/pt-br/library/bb337005.aspx
但是,如果您的脚本依赖于其他某些脚本,则更好的选择是使用ScriptManager.RegisterStartupScript方法,但是不要将脚本主体作为参数传递,而是将整个<script>标记与脚本地址一起传递:
ScriptManager.RegisterStartupScript(
    updatePanel,
    updatePanel.GetType(),
    "a_key",
    "<script type='text/javascript' src='my_script.js'></script>",
    false
);

请注意,设置addScriptTags标志的最后一个参数设置为false,允许您渲染具有定义src属性的整个标记。


我根据您的建议更改了代码,但出现了奇怪的问题,现在我的js文件中出现错误 - 预期对象。与此同时,当我将js代码传递为字符串时,一切正常。 - user1178399
@user1178399,看起来你的脚本依赖于其他在它之后被渲染的脚本(因此,你所依赖的对象尚未被创建)。请参考上面的补充答案以了解该怎么做。 - Raphael
不错,至少你最后的解释让我停止了在网上进一步寻找解决方案。 - karlis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接