所以问题如下:
我有自己的用户控制权。其中包含脚本标记中的一些javascript文件,如此
<script type="text/javascript" src="../somefile.js" ></script>
直接在ascx页面上的或一些javascript代码。 如果我把这个控件放在aspx标记的某个地方,一切都有效。但是如果我将这个控件动态地添加到页面上的一些UpdatePanel占位符(这是我不能改变的逻辑),控件呈现自己然后我得到js错误消息,这表示放在somefile.js中的函数是未定义/为空。为什么会这样?无论如何强制js包括在这种情况下。
抱歉没有足够的具体但代码量很大,我无法提供相同错误的简化示例,。
包含脚本但不知道函数未定义。我是js的新手,所以有可能只包含脚本但没有执行,所以函数没有声明???
有趣的是,如果在某些页面上我的自定义控件是在aspx中声明的。动态添加更多实例不会产生任何问题。
答案 0 :(得分:16)
在您的控件的加载事件中,执行以下操作:
if (!Page.ClientScript.IsClientScriptIncludeRegistered("keyName"))
Page.ClientScript.RegisterClientScriptInclude("keyName",
Page.ResolveUrl("~/Scripts/MyJavaScript.js"));
答案 1 :(得分:2)
如何将它包含在ScriptManager.Scripts中?
<asp:ScriptManager runat="server" ID="scriptManager1" EnablePageMethods="true">
<Scripts>
<asp:ScriptReference Path="~/somefile.js" />
</Scripts>
</asp:ScriptManager>
编辑:
从ascx你可以做这样的事情(OnPreRender就是我会尝试的地方):
ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("~/somefile.js"));
或者,您可以尝试
ScriptManager.GetCurrent(Page).RegisterClientScriptInclude(
this,
typeof(Page),
"UniqueScriptKey",
ResolveClientUrl("~/somefile.js"));
答案 2 :(得分:0)
你确定你的JS文件正在加载吗?可能是文件不在正确的位置 - 请勿在路径中使用../,因为这是相对的,如果您正在共享此页面并且页面不是全部在同一深度,则可能是错误的:
做这样的事情:
<script type="text/javascript" src="/Scripts/somefile.js" ></script>