刚才想整理一下文章,不知道怎么搞的,一下子就没了,从新帖。
在一个项目当中,使用了asp.net ajaxToolkit中的TAB控件。
现在TAB中做布局,内容等等,没发现问题。
开始处理逻辑了,问题来了:
原来设想让一个按钮弹出ModalPopup控件,在其中让用户填写一些东西。
因为想让这个ModalPopup控件服用,想在弹出之前,在其中修改一些东西。
HTML控件没问题,服务器端控件就不行了。
诧异呀,以前可以这样用的?
开始疯狂的在园子里和Google上搜索,都没这个问题的答案。
在MSDN上看了一下,也没有,而且都是用$get直接用服务器端控件的ID呀。
那是我错了,整个测试的页面,试吧!
居然没有错误,达到了试验的目的,为什么?
那就开始将项目中的代码移过来一点一点的对比。
当添加了TAB控件以后,问题出现了,和项目中的问题一模一样。
请看下面的代码:
Code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="Swinfo.index" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script type="text/javascript">
function processEventInfo(eventElement) {
var result = '';
for (var i = 0, l = myArray.length; i < l; i++) {
var arrayVal = myArray[i];
if (typeof(arrayVal) !== 'undefined') {
// Example: eventElement.clientX
$get("tbTitle").value = "test ok"
result += arrayVal + " = " + eval("eventElement." + arrayVal) + '<br/>';
}
}
$get('Label2').innerHTML = result;
}
function processEventInfo1(eventElement) {
var result = '';
for (var i = 0, l = myArray.length; i < l; i++) {
var arrayVal = myArray[i];
if (typeof(arrayVal) !== 'undefined') {
// Example: eventElement.clientX
$get("tbTitle1").value = "test ok"
result += arrayVal + " = " + eval("eventElement." + arrayVal) + '<br/>';
}
}
$get('Label4').innerHTML = result;
}
function pageLoad() {
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<div class="main_index">
<div id="main" class="main">
<ajaxToolkit:TabContainer ID="TabContainer_Main" runat="server" CssClass="green">
<ajaxToolkit:TabPanel ID="TabPanel_Wen" runat="server" HeaderText="问产品">
<ContentTemplate>
<!--测试内容,暂时保留-->
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" GroupingText="Update Panel">
<asp:Label ID="Label1" runat="server" Text="Click button to see event details."></asp:Label>
<br />
<asp:TextBox ID="tbTitle" runat="server" ></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" AccessKey="b" />
<br />
<asp:Label ID="Label2" runat="server"></asp:Label>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</ajaxToolkit:TabPanel>
</ajaxToolkit:TabContainer>
<!--测试内容,暂时保留-->
<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="Panel2" runat="server" GroupingText="Update Panel">
<asp:Label ID="Label3" runat="server" Text="Click button to see event details."></asp:Label>
<br />
<asp:TextBox ID="tbTitle1" runat="server" ></asp:TextBox>
<br />
<asp:Button ID="Button2" runat="server" Text="Button" AccessKey="b" />
<br />
<asp:Label ID="Label4" runat="server"></asp:Label>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</form>
</body>
</html>
<script type="text/javascript">
//问题就处在这里下面的这条语句,两条语句的处理是一样的,一个在TAB内,一个在TAB外
//TAB内的是注释掉的那一句,接触注释,运行就会报告没有对象,换成<%=Button1.ClientID%>也是一样
//Sys.UI.DomEvent.addHandler($get("Button1"), "click", processEventInfo);
Sys.UI.DomEvent.addHandler($get("Button2"), "click", processEventInfo1);
var myArray = ['altKey', 'button', 'charCode', 'clientX', 'clientY',
'ctrlKey', 'offsetX', 'offsetY', 'screenX', 'screenY',
'shiftKey', 'target', 'type'];
</script>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="Swinfo.index" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script type="text/javascript">
function processEventInfo(eventElement) {
var result = '';
for (var i = 0, l = myArray.length; i < l; i++) {
var arrayVal = myArray[i];
if (typeof(arrayVal) !== 'undefined') {
// Example: eventElement.clientX
$get("tbTitle").value = "test ok"
result += arrayVal + " = " + eval("eventElement." + arrayVal) + '<br/>';
}
}
$get('Label2').innerHTML = result;
}
function processEventInfo1(eventElement) {
var result = '';
for (var i = 0, l = myArray.length; i < l; i++) {
var arrayVal = myArray[i];
if (typeof(arrayVal) !== 'undefined') {
// Example: eventElement.clientX
$get("tbTitle1").value = "test ok"
result += arrayVal + " = " + eval("eventElement." + arrayVal) + '<br/>';
}
}
$get('Label4').innerHTML = result;
}
function pageLoad() {
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<div class="main_index">
<div id="main" class="main">
<ajaxToolkit:TabContainer ID="TabContainer_Main" runat="server" CssClass="green">
<ajaxToolkit:TabPanel ID="TabPanel_Wen" runat="server" HeaderText="问产品">
<ContentTemplate>
<!--测试内容,暂时保留-->
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" GroupingText="Update Panel">
<asp:Label ID="Label1" runat="server" Text="Click button to see event details."></asp:Label>
<br />
<asp:TextBox ID="tbTitle" runat="server" ></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" AccessKey="b" />
<br />
<asp:Label ID="Label2" runat="server"></asp:Label>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</ajaxToolkit:TabPanel>
</ajaxToolkit:TabContainer>
<!--测试内容,暂时保留-->
<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="Panel2" runat="server" GroupingText="Update Panel">
<asp:Label ID="Label3" runat="server" Text="Click button to see event details."></asp:Label>
<br />
<asp:TextBox ID="tbTitle1" runat="server" ></asp:TextBox>
<br />
<asp:Button ID="Button2" runat="server" Text="Button" AccessKey="b" />
<br />
<asp:Label ID="Label4" runat="server"></asp:Label>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</form>
</body>
</html>
<script type="text/javascript">
//问题就处在这里下面的这条语句,两条语句的处理是一样的,一个在TAB内,一个在TAB外
//TAB内的是注释掉的那一句,接触注释,运行就会报告没有对象,换成<%=Button1.ClientID%>也是一样
//Sys.UI.DomEvent.addHandler($get("Button1"), "click", processEventInfo);
Sys.UI.DomEvent.addHandler($get("Button2"), "click", processEventInfo1);
var myArray = ['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吧!!!