【问题标题】:How to ensure js is included in ascx file?如何确保 js 包含在 ascx 文件中?
【发布时间】:2011-02-17 03:18:58
【问题描述】:

所以问题如下:

我确实有自己的用户控制。在脚本标签中有一些 javascript 文件,像这样

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

或直接在 ascx 页面上的一些 javascript 代码。 如果我将此控件放在 aspx 标记中的某个位置,一切正常。但是如果我在回发时将此控件动态添加到页面中的某个 UpdatePanel 占位符(这是我无法更改的逻辑),控件会呈现自身,然后我收到 js 错误消息,它表示放置在 somefile.js 中的函数是未定义/为空。为什么会这样?无论如何,在这种情况下强制 js 包括在内。

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

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

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

【问题讨论】:

    标签: javascript asp.net updatepanel


    【解决方案1】:

    在控件的加载事件中,执行以下操作:

    if (!Page.ClientScript.IsClientScriptIncludeRegistered("keyName"))
        Page.ClientScript.RegisterClientScriptInclude("keyName",
            Page.ResolveUrl("~/Scripts/MyJavaScript.js"));
    

    【讨论】:

      【解决方案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

      【讨论】:

      • 我能以某种方式找回它吗?它在我无法修改的母版页上声明。我曾尝试通过 ClientScriptManager 在 aspx.cs 文件中注册该文件,但没有成功。
      • 我添加了另一种添加脚本的方法。请参阅编辑。
      • 还可以查看此 msdn 页面中的示例。 msdn.microsoft.com/us-en/library/…
      • 它很可能必须在 ScriptManagerProxy 中,因为只能有一个 ScriptManager,而且大多数人将它放在页面或母版页中。
      • ScriptManager.GetCurrent(Page) 获取对该页面可用的脚本管理器的引用(可能来自它的母版页)。见msdn.microsoft.com/en-us/library/…
      【解决方案3】:

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

      做这样的事情:

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

      【讨论】:

      • 如果控件在 aspx 文件中声明,则 JS 文件正在加载。仅当此控件在某些回发时动态添加到 UpdatePanel 内的某个 PlaceHolder 时,我才会遇到此问题。我还尝试将这些脚本直接包含到 ascx 文件中。不起作用。
      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2017-10-05
      相关资源
      最近更新 更多