ASP.NET AJAX常见问题整理

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


<head runat="server">
     
<title>Untitled Pagetitle>
     
<script type="text/javascript" src="js/gridviewjs.js"/>
     
<link type="text/css" rel="Stylesheet" href="css/gridviewcss.css" />    
</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函数来进行客户端的转换。


 function getAjaxId(id)
 {
     
while(id.indexOf('_')>-1)
     {
         id
=id.replace('_','$');
     }
     
return id;
 }