如何确保js包含在ascx文件中?

时间:2011-02-17 03:18:59

标签: javascript asp.net updatepanel

所以问题如下:

我有自己的用户控制权。其中包含脚本标记中的一些javascript文件,如此

<script type="text/javascript" src="../somefile.js" ></script>
直接在ascx页面上的

或一些javascript代码。 如果我把这个控件放在aspx标记的某个地方,一切都有效。但是如果我将这个控件动态地添加到页面上的一些UpdatePanel占位符(这是我不能改变的逻辑),控件呈现自己然后我得到js错误消息,这表示放在somefile.js中的函数是未定义/为空。为什么会这样?无论如何强制js包括在这种情况下。

抱歉没有足够的具体但代码量很大,我无法提供相同错误的简化示例,。

包含脚本但不知道函数未定义。我是js的新手,所以有可能只包含脚本但没有执行,所以函数没有声明???

有趣的是,如果在某些页面上我的自定义控件是在aspx中声明的。动态添加更多实例不会产生任何问题。

3 个答案:

答案 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"));

Reference link

答案 2 :(得分:0)

你确定你的JS文件正在加载吗?可能是文件不在正确的位置 - 请勿在路径中使用../,因为这是相对的,如果您正在共享此页面并且页面不是全部在同一深度,则可能是错误的:

做这样的事情:

<script type="text/javascript" src="/Scripts/somefile.js" ></script>