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的错误。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>
原因是类似下面的脚本采用了封闭式的标签声明,而
<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 }
2 {
3 while(id.indexOf('_')>-1)
4 {
5 id=id.replace('_','$');
6 }
7 return id;
8 }