JS引用放在updatepanel内,出现的一些异常!

msnadair 2010-09-26 05:00:57
今天写了一个用户控件,用户控件中引用了一个JS文件.
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<script language="javascript" type="text/javascript" src="JS/InputableDropDownList.js"></script>
<asp:TextBox ID="txtList" runat="server" Width="150px" onclick="GetDropDownList(this)" onkeyup="GetDropDownList(this)" datasource="" autocomplete="off" pagecount="18" value_to_input=""></asp:TextBox>
<input id="hf_value" type="hidden" runat="server" style="width:0px;"/>

如果不使用Updatepanel,使用起来没有问题, 但是,如果把用户控件放到updatepanel中,无论updatepanel的updatemode,childrensastriggers如何设置, 只要页面回发了一次,再将焦点放到用户控件输入框中,就会出现异常,
异常表面上看上去是页面凌乱, 在GetDropDownList中,设置debugger,会发现出现"没有可用于当前位置的源代码"

如果将用户控件中的JS引用,放到页面上(aspx页面)引用,将用户控件中的引用去掉,就不会报错!

然后我又单独地将页面上的JS引用放到Updatepanel内,就会再次出现一样的错误!


为什么? 如何做才能找到源文件?

附: 出错后,通过查看页面的源文件,发现JS引用的代码是存在的:
<div id="UpdatePanel1">

<div>
<br />

<script language="javascript" type="text/javascript" src="JS/InputableDropDownList.js"></script>
<input name="InputableDropDownList1$txtList" type="text" id="InputableDropDownList1_txtList" onclick="GetDropDownList(this)" onkeyup="GetDropDownList(this)" datasource="" autocomplete="off" pagecount="18" value_to_input="" style="width:150px;" />
<input name="InputableDropDownList1$hf_value" type="hidden" id="InputableDropDownList1_hf_value" style="width:0px;" />
<br />

<input type="submit" name="Button1" value="Button" id="Button1" />
<input name="TextBox1" type="text" id="TextBox1" />
</div>
...全文
376 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
msnadair 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 winner2050 的回复:]
无语。

js 放在用户控件里面干嘛?你用相对路径随时会引起死链接。
[/Quote]

我的用户控件里,使用了大量的javascript脚本。 不放在JS里的话,会直接显示在使用用户控件的页面上。造成页面很大!

项目内用的控件,不公开用。哈。。 所以不担心路径
msnadair 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gongsun 的回复:]
js末尾加入此代码才能在updatepanel调用

if (typeof (sys) != "undefined") { sys.application.notifyscriptloaded();}
[/Quote]

在JS文件末尾加了也还是一样!
danjiewu 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 msnadair 的回复:]

引用 17 楼 danjiewu 的回复:
后台OnInit里加上
ScriptManager.RegisterClientScriptInclude(Page, typeof(WebUserControl), "WebUserControl", ResolveUrl("JS/InputableDropDownList.js"));

这个试过了吗?


在页面的ONinit事件里……
[/Quote]

用户控件
danjiewu 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 rewoshengqi 的回复:]

引用 8 楼 danjiewu 的回复:
不要在页面里添加Script
在后台使用,可以在OnInit方法或者其他方法里

C# code

ScriptManager.RegisterClientScriptInclude(Page, typeof(WebUserControl), "WebUserControl", ResolveUrl("JS/InputableDropDown……
[/Quote]

用UpdatePanel的页面上一定有个ScriptManager对吧,看下MS对ScriptManager的介绍有这么一条:
Microsoft AJAX Library 的客户端脚本功能和要发送到浏览器的任何自定义脚本。
再要详细的看下MSDN,ScriptManager有多个方法用来在使用UpdatePanel的情况下向前端页面定义脚本。
hongjiaoli 2010-09-27
  • 打赏
  • 举报
回复
页面回发时出现了问题。
dengNeeo 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 danjiewu 的回复:]
不要在页面里添加Script
在后台使用,可以在OnInit方法或者其他方法里

C# code

ScriptManager.RegisterClientScriptInclude(Page, typeof(WebUserControl), "WebUserControl", ResolveUrl("JS/InputableDropDownList.js"));
[/Quote]


楼上这位大大 请你说明下你这样说的理由好吗
我想知道
谢谢您呀
hanyise520 2010-09-27
  • 打赏
  • 举报
回复
局部刷新,回发,JS脚本失效,恩就是这样的
winner2050 2010-09-27
  • 打赏
  • 举报
回复
无语。

js 放在用户控件里面干嘛?你用相对路径随时会引起死链接。
danjiewu 2010-09-27
  • 打赏
  • 举报
回复
不要在页面里添加Script
在后台使用,可以在OnInit方法或者其他方法里

ScriptManager.RegisterClientScriptInclude(Page, typeof(WebUserControl), "WebUserControl", ResolveUrl("JS/InputableDropDownList.js"));
gongsun 2010-09-27
  • 打赏
  • 举报
回复
js末尾加入此代码才能在updatepanel调用

if (typeof (sys) != "undefined") { sys.application.notifyscriptloaded();}
gongsun 2010-09-27
  • 打赏
  • 举报
回复
使用updatepanel的,面试时直接out.
msnadair 2010-09-27
  • 打赏
  • 举报
回复
大家有什么办法可以处理? 请指点一下。谢谢
msnadair 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 danjiewu 的回复:]
后台OnInit里加上
ScriptManager.RegisterClientScriptInclude(Page, typeof(WebUserControl), "WebUserControl", ResolveUrl("JS/InputableDropDownList.js"));

这个试过了吗?
[/Quote]

在页面的ONinit事件里?还是用户控件的ONINIT事件里?
danjiewu 2010-09-27
  • 打赏
  • 举报
回复
后台OnInit里加上
ScriptManager.RegisterClientScriptInclude(Page, typeof(WebUserControl), "WebUserControl", ResolveUrl("JS/InputableDropDownList.js"));

这个试过了吗?
msnadair 2010-09-27
  • 打赏
  • 举报
回复
ANY BODY HELP ME?
msnadair 2010-09-26
  • 打赏
  • 举报
回复
我不是为了用它,而是兼容性测试! 而我们项目组又对updatepanel使用得比较多。
一测试才发现这问题
hahanan1987 2010-09-26
  • 打赏
  • 举报
回复
UpdatePanel除了方便 没啥优点 曾经因为里面的脚本问题 调死人
msnadair 2010-09-26
  • 打赏
  • 举报
回复
不是ID的问题! 因为用户控件放在Updatepanel中,JS引用放在updatepanel之外,就不会出现问题.

问题的根源是:JS引用放到updatepanel中以后,页面回发了,页面就似乎压根儿就找不到JS文件.而查看页面的源文件,JS引用的脚本还是存在的.
porschev 2010-09-26
  • 打赏
  • 举报
回复
用updatepanel之后。。。源码中控件的ID有些会发生变化。。

这个错误可能性太多了。。只能一部部调试了

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧