1.ASP.NET AJAX-Enabled页面引用脚本出现的问题


1 <head runat="server">
2     <title>Untitled Page</title>
3     <script type="text/javascript" src="js/gridviewjs.js"/>
4     <link type="text/css" rel="Stylesheet" href="css/gridviewcss.css" />    
5 </head>
我原来的js代码是这样的,结果导致画面上有ScriptManager的时候一直发生this.form为Null的错误。
原因是类似下面的脚本采用了封闭式的标签声明,而
<script type="text/javascript" src="Scripts/SomeFile.js"/>

而将标签声明为开放式的形式才有助于AJAX库判断引用Javascript的结尾。 

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

2.ASP.NET AJAX中的控件ID问题

因为使用AJAX容器控件会导致ScriptManager直接在你所使用的空间前面添加前缀而改变,如原来控件为ExtendGridView1,
而在Tab容器中,则变为tbcMain_tbpOrgnz_ExtendGridView1。而这个ID使用的场景仅限于非.NET页面事件相关的普通
Javascript函数,如Document.getElementId方法中你可以使用这个ID在客户端找到该控件。

但在服务器端进行FindControl或者在客户端使用__doPostback函数的时候一定要使用把"_"转换成"$"后的控件ID,即:
tbcMain_tbpOrgnz_ExtendGridView1 -> tbcMain$tbpOrgnz$ExtendGridView1

在服务器端我们可以使用String.Replace函数直接进行转换。在Javascript中比较汗颜的是String.Replace函数一次只转换一个,
所以我写了一个Javascript函数来进行客户端的转换。

1 function getAjaxId(id)
2 {
3     while(id.indexOf('_')>-1)
4     {
5         id=id.replace('_','$');
6     }
7     return id;
8 }
Posted on 2008-08-05 12:21  RickTsuei  阅读(2201)  评论(6编辑  收藏  举报