似乎是发现了asp.net ajaxToolkit中TAB控件的一个BUG

刚才想整理一下文章,不知道怎么搞的,一下子就没了,从新帖。

在一个项目当中,使用了asp.net ajaxToolkit中的TAB控件。
现在TAB中做布局,内容等等,没发现问题。
开始处理逻辑了,问题来了:
原来设想让一个按钮弹出ModalPopup控件,在其中让用户填写一些东西。
因为想让这个ModalPopup控件服用,想在弹出之前,在其中修改一些东西。
HTML控件没问题,服务器端控件就不行了。
诧异呀,以前可以这样用的?
开始疯狂的在园子里和Google上搜索,都没这个问题的答案。
在MSDN上看了一下,也没有,而且都是用$get直接用服务器端控件的ID呀。
那是我错了,整个测试的页面,试吧!
居然没有错误,达到了试验的目的,为什么?
那就开始将项目中的代码移过来一点一点的对比。
当添加了TAB控件以后,问题出现了,和项目中的问题一模一样。
请看下面的代码:
Code
%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx.cs"Inherits="Swinfo.index"%
%@RegisterAssembly="AjaxControlToolkit"Namespace="AjaxControlToolkit"TagPrefix="ajaxToolkit"%
!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

htmlxmlns="http://www.w3.org/1999/xhtml"
headrunat="server"
title/title
scripttype="text/javascript"
functionprocessEventInfo(eventElement){
varresult='';
for(vari=0,l=myArray.length;il;i++){
vararrayVal=myArray[i];
if(typeof(arrayVal)!=='undefined'){
//Example:eventElement.clientX
$get("tbTitle").value="testok"
result+=arrayVal+"="+eval("eventElement."+arrayVal)+'br/';
}
}
$get('Label2').innerHTML=result;
}

functionprocessEventInfo1(eventElement){
varresult='';
for(vari=0,l=myArray.length;il;i++){
vararrayVal=myArray[i];
if(typeof(arrayVal)!=='undefined'){
//Example:eventElement.clientX
$get("tbTitle1").value="testok"
result+=arrayVal+"="+eval("eventElement."+arrayVal)+'br/';
}
}
$get('Label4').innerHTML=result;
}
functionpageLoad(){
}

/script
/head
body
formid="form1"runat="server"
asp:ScriptManagerID="ScriptManager1"runat="server"/
divclass="main_index"
divid="main"class="main"
ajaxToolkit:TabContainerID="TabContainer_Main"runat="server"CssClass="green"
ajaxToolkit:TabPanelID="TabPanel_Wen"runat="server"HeaderText="问产品"
ContentTemplate
!--测试内容,暂时保留--
asp:UpdatePanelID="UpdatePanel1"runat="server"ChildrenAsTriggers="False"UpdateMode="Conditional"
ContentTemplate
asp:PanelID="Panel1"runat="server"GroupingText="UpdatePanel"
asp:LabelID="Label1"runat="server"Text="Clickbuttontoseeeventdetails."/asp:Label
br/
asp:TextBoxID="tbTitle"runat="server"/asp:TextBox
br/
asp:ButtonID="Button1"runat="server"Text="Button"AccessKey="b"/
br/
asp:LabelID="Label2"runat="server"/asp:Label
/asp:Panel
/ContentTemplate
/asp:UpdatePanel
/ContentTemplate
/ajaxToolkit:TabPanel
/ajaxToolkit:TabContainer
!--测试内容,暂时保留--
asp:UpdatePanelID="UpdatePanel2"runat="server"ChildrenAsTriggers="False"UpdateMode="Conditional"
ContentTemplate
asp:PanelID="Panel2"runat="server"GroupingText="UpdatePanel"
asp:LabelID="Label3"runat="server"Text="Clickbuttontoseeeventdetails."/asp:Label
br/
asp:TextBoxID="tbTitle1"runat="server"/asp:TextBox
br/
asp:ButtonID="Button2"runat="server"Text="Button"AccessKey="b"/
br/
asp:LabelID="Label4"runat="server"/asp:Label
/asp:Panel
/ContentTemplate
/asp:UpdatePanel
/div
/div
/form
/body
/html
scripttype="text/javascript"
//问题就处在这里下面的这条语句,两条语句的处理是一样的,一个在TAB内,一个在TAB外
//TAB内的是注释掉的那一句,接触注释,运行就会报告没有对象,换成%=Button1.ClientID%也是一样
//Sys.UI.DomEvent.addHandler($get("Button1"),"click",processEventInfo);
Sys.UI.DomEvent.addHandler($get("Button2"),"click",processEventInfo1);
varmyArray=['altKey','button','charCode','clientX','clientY',
'ctrlKey','offsetX','offsetY','screenX','screenY',
'shiftKey','target','type'];

/script


代码中实现了两个一模一样的功能,一个在TAB中,一个在TAB外,TAB外面的就执行正确,$get能够取得服务器端控件的引用。
而TAB内的就无法实现对服务器端控件的引用。

事情清楚了,就是TAB控件惹的祸.
但是不是BUG,我也判断不出来。请各位高手看看,是不是BUG,如果不是BUG,请各位高手指教。
如果是BUG,我英文不好,请各位高人报告BUG吧!!!

posted @ 2013-01-16 14:44  gnhao  阅读(287)  评论(0编辑  收藏  举报