asp.net usercontrol不会在updatepanel中触发javascript

Ada*_*ood 7 javascript asp.net user-controls

我已经看到类似的问题和答案,但似乎没有解决问题.

我在更新面板中有一个用户控件.在我的用户控件里面我输出了javascript.

触发时javascript不会触发.如果我将javascript移动到usercontrol/updatepanels之外的父页面,则会触发它.这样做是没有意义的,因为我不能在没有重复代码的情况下在另一个页面上使用此usercontrol ...通过复制整个javascript(不同的站点)或在每个页面中添加对.js文件的引用在(同一地点).它的便携性更低

我只想用控件输出javascript(在更新面板内).

我提到了updatepanel的准确性.即使我将usercontrol放在updatepanels之外,它也不起作用.

保持简单(这对我不起作用):

用户控件:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="_location.ascx.cs" Inherits="_location" %>
<script type="text/javascript">
    function test() {
        alert('Hello World!');
    }
</script>

<a href="javascript:void(0);" onclick="javascript:test();">
    Find For Me
</a>
Run Code Online (Sandbox Code Playgroud)

家长:

<uc1:_location runat="server" ID="_location"  />
Run Code Online (Sandbox Code Playgroud)

在chrome中调试告诉我"Uncaught ReferenceError:test not defined"

如果我将javascript直接添加到onclick,如下所示,它可以工作:

onclick="alert('Hello World!');"
Run Code Online (Sandbox Code Playgroud)

如上所述,将函数移动到父页面也可以.

就像浏览器忽略用户控件的脚本输出一样.

有任何想法吗?

Ari*_*tos 6

当你有一个UpdatePanel并且UpdatePanel更新它的内容时,它将它的内容视为简单的text/html(而不是代码),它没有任何可用于运行脚本并使其可用于页面的解析器.

所以这个内容,

<script type="text/javascript">
    function test() { alert('Hello World!'); }
</script>

<a href="javascript:void(0);" onclick="javascript:test();">
    Find For Me
</a>
Run Code Online (Sandbox Code Playgroud)

在更新面板的客户端代码运行并更新页面内容之后,不会解析脚本部分 - 页面的简单文本/ html.

然而这部分运行

<a href="javascript:void(0);" onclick="alert('Hello World!');">Find For Me</a>
Run Code Online (Sandbox Code Playgroud)

因为onclick当你点击它时就完成了属性的解析.

有以下可用的解决方法:

  1. 将您的JavaScript移动到外部文件中
  2. 将脚本移到UpdatePanel之外
  3. 使用RegisterClientScriptBlock或替代函数在后面的代码中注册脚本.