我做了一个用户控件,默认显示一个LinkButton,点击后弹出ModalPopupExtender的Panel,Panel中有一个Button,和DropDownList,用户从DropDownList中选择记录后,点击Button,将选中记录的名称赋值到LinkButton的Text属性。
控件放在页面中使用没有问题,放在TabContainer中使用,可以正常弹出Panel,但似乎无法触发Button的Click事件。哪位兄弟做过类似的应用,帮忙看一下,谢谢了!
控件放在页面中使用没有问题,放在TabContainer中使用,可以正常弹出Panel,但似乎无法触发Button的Click事件。哪位兄弟做过类似的应用,帮忙看一下,谢谢了!
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SelectCeKongSheBei.ascx.cs"
Inherits="AtonDatabaseG2.UserControl.SelectCeKongSheBei" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Src="PictureDisplay.ascx" TagName="PictureDisplay" TagPrefix="uc2" %>
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</asp:ScriptManagerProxy>
<asp:LinkButton ID="lnkbtnSelect" runat="server">选择</asp:LinkButton>
<cc1:ModalPopupExtender ID="lnkbtnSelect_ModalPopupExtender" runat="server" PopupControlID="pnl"
OkControlID="btn" CancelControlID="btnCancel" TargetControlID="lnkbtnSelect">
</cc1:ModalPopupExtender>
<asp:Panel ID="pnl" runat="server" CssClass="popupPanel" Style="width: 650px; display: none">
<br />
请选择测控设备:<asp:DropDownList ID="ddl" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="ddl_SelectedIndexChanged">
</asp:DropDownList>
<br />
<br />
<center>
<asp:UpdatePanel ID="upDengLong" runat="server">
<ContentTemplate>
<table cellpadding="2" cellspacing="0" style="width: 600px" class="inputTable">
<tr>
<td class="leftCell" style="width: 80px">
设备型号
</td>
<td class="rightCell" style="width: 100px">
<asp:Label ID="lblCeKongSheBeiXingHao" runat="server"></asp:Label>
</td>
<td class="leftCell" style="width: 80px">
生产厂家
</td>
<td class="rightCell" colspan="3">
<asp:Label ID="lblCeKongSheBeiChangJia" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td class="leftCell" style="width: 80px">
工作电压
</td>
<td class="rightCell" style="width: 100px">
<asp:Label ID="lblGongZuoDianYa" runat="server"></asp:Label> V
</td>
<td class="leftCell" style="width: 80px">
工作电流
</td>
<td class="rightCell" style="width: 100px">
<asp:Label ID="lblGongZuoDianLiu" runat="server"></asp:Label> A
</td>
<td class="leftCell" style="width: 80px">
工作功耗
</td>
<td class="rightCell" style="width: 100px">
<asp:Label ID="lblGongZuoGongHao" runat="server"></asp:Label> W
</td>
</tr>
<tr>
<td class="leftCell" style="width: 80px">
有效范围
</td>
<td class="rightCell" style="width: 100px">
<asp:Label ID="lblYouXiaoFanWei" runat="server"></asp:Label> 海里
</td>
<td class="leftCell" style="width: 80px">
安装尺寸
</td>
<td class="rightCell" colspan="3">
<asp:Label ID="lblAnZhuangChiCun" runat="server"></asp:Label> (mm×mm×mm)
</td>
</tr>
<tr>
<td class="leftCell" style="width: 80px">
通讯方式
</td>
<td class="rightCell" style="width: 100px">
<asp:Label ID="lblTongXunFangShi" runat="server"></asp:Label>
</td>
<td class="leftCell" style="width: 80px">
设备价值
</td>
<td class="rightCell" style="width: 100px">
<asp:Label ID="lblCeKongSheBeiJiaZhi" runat="server"></asp:Label> 元
</td>
<td class="leftCell" style="width: 80px">
</td>
<td class="rightCell" style="width: 100px">
</td>
</tr>
<tr>
<td class="leftCell" style="width: 80px">
设备照片
</td>
<td class="rightCell" colspan="5">
<uc2:PictureDisplay ID="PictureDisplay1" runat="server" />
</td>
</tr>
</table>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
<br />
<asp:Button ID="btn" runat="server" Text="Button" Style="display: none" />
<asp:Button ID="btnSave" runat="server" Text="确定" OnClick="btnSave_Click" />
<asp:Button ID="btnCancel" runat="server" Text="取消" />
<br />
<br />
</center>
</asp:Panel>using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Microsoft.Practices.EnterpriseLibrary.Data;
using AtoNBusinessLogic.Common;
using AtoNBusinessLogic.QiCai;
using Reform.Common;namespace AtonDatabaseG2.UserControl
{
public partial class SelectCeKongSheBei : System.Web.UI.UserControl
{
Database db = DatabaseFactory.CreateDatabase("AtoN");
/// <summary>
/// 器材选择事件
/// </summary>
public event QiCaiSelectedChanged OnSelectedChanged;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDropDownList();
ScriptManager sm = ScriptManager.GetCurrent(Page);
sm.RegisterPostBackControl(btnSave);
}
} /// <summary>
/// 绑定测控设备控件信息
/// </summary>
/// <param name="id">测控设备ID</param>
public void BindByID(string id)
{
CeKongSheBeiDataAccess da = new CeKongSheBeiDataAccess(db);
CeKongSheBeiData data = da.SelectByID(id);
lnkbtnSelect.Text = data.CeKongSheBeiXingHao;
lnkbtnSelect.ToolTip = data.ID.ToString();
BindCeKongSheBeiInfo(id);
ddl.SelectedValue = id;
} private void BindDropDownList()
{
CeKongSheBeiDataAccess da = new CeKongSheBeiDataAccess(db);
List<CeKongSheBeiData> list = da.SelectAll();
ddl.Items.Add(new ListItem(string.Empty, "-1"));
foreach (CeKongSheBeiData data in list)
{
ddl.Items.Add(new ListItem(data.CeKongSheBeiXingHao, data.ID.ToString()));
}
} protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddl.SelectedItem != null)
{
BindCeKongSheBeiInfo(ddl.SelectedValue);
}
} private void ResetCeKongSheBeiInfo()
{
lblCeKongSheBeiChangJia.Text = string.Empty;
lblCeKongSheBeiXingHao.Text = string.Empty;
lblGongZuoDianYa.Text = string.Empty;
lblGongZuoDianLiu.Text = string.Empty;
lblGongZuoGongHao.Text = string.Empty;
lblYouXiaoFanWei.Text = string.Empty;
lblAnZhuangChiCun.Text = string.Empty;
lblTongXunFangShi.Text = string.Empty;
lblCeKongSheBeiJiaZhi.Text = string.Empty;
PictureDisplay1.BindByPictureID("-1");
}
private void BindCeKongSheBeiInfo(string id)
{
if (string.IsNullOrEmpty(id))
{
ResetCeKongSheBeiInfo();
return;
}
CeKongSheBeiDataAccess da = new CeKongSheBeiDataAccess(db);
CeKongSheBeiData data = da.SelectByID(id);
if (data == null)
{
ResetCeKongSheBeiInfo();
return;
}
lblCeKongSheBeiChangJia.Text = data.CeKongSheBeiChangJia;
lblCeKongSheBeiXingHao.Text = data.CeKongSheBeiXingHao;
if (data.GongZuoDianYa != 0)
{
lblGongZuoDianYa.Text = data.GongZuoDianYa.ToString();
}
if (data.GongZuoDianLiu != 0)
{
lblGongZuoDianLiu.Text = data.GongZuoDianLiu.ToString();
}
if (data.GongZuoGongHao != 0)
{
lblGongZuoGongHao.Text = data.GongZuoGongHao.ToString();
}
if (data.YouXiaoFanWei != 0)
{
lblYouXiaoFanWei.Text = data.YouXiaoFanWei.ToString();
}
lblAnZhuangChiCun.Text = data.AnZhuangChiCun;
lblTongXunFangShi.Text = data.TongXunFangShi;
if (data.CeKongSheBeiJiaZhi != 0)
{
lblCeKongSheBeiJiaZhi.Text = data.CeKongSheBeiJiaZhi.ToString();
}
PictureDisplay1.BindByPictureID(data.PhotoID.ToString());
} protected void btnSave_Click(object sender, EventArgs e)
{
if (ddl.SelectedValue != string.Empty && ddl.SelectedValue != "-1")
{
lnkbtnSelect.ToolTip = ddl.SelectedValue;
CeKongSheBeiDataAccess da = new CeKongSheBeiDataAccess(db);
CeKongSheBeiData data = da.SelectByID(ddl.SelectedValue);
lnkbtnSelect.Text = data.CeKongSheBeiXingHao;
QiCaiEventArg arg = new QiCaiEventArg(data.ID);
if (OnSelectedChanged != null)
{
OnSelectedChanged(this, arg);
}
}
else
{
lnkbtnSelect.Text = "选择";
lnkbtnSelect.ToolTip = "-1";
}
lnkbtnSelect_ModalPopupExtender.Hide();
}
}
}
{
if (!IsPostBack)
{
//其他代码略
SelectDingBiao1.OnSelectedChanged += new AtonDatabaseG2.UserControl.QiCaiSelectedChanged(SelectDingBiao1_OnSelectedChanged);
}
void SelectDingBiao1_OnSelectedChanged(object sender, AtonDatabaseG2.UserControl.QiCaiEventArg e)
{
DingBiaoDataAccess dingbiaoDA = new DingBiaoDataAccess(db);
DingBiaoData dingbiao = dingbiaoDA.SelectByID(e.QiCaiID.ToString());
if (dingbiao != null)
{
lblDingBiaoXingZhuang.Text = dingbiao.DingBiaoXingZhuang;
lblDingBiaoYanSe.Text = dingbiao.DingBiaoYanSe;
lblDingBiaoTuAn.Text = dingbiao.DingBiaoTuAn;
}
}
另外我建议你将没用的代码删除掉,提取一个测试版本,这样代码会少一些,帮你找问题的人就会多一些.
请问你是怎样将控件放在 TabContainer 中的?另外,估计如果你把选择事件写成客户端代码,即写成js应该就没有问题了,部分代码如下:将
<asp:Button ID="btnSave" runat="server" Text="确定" OnClick="btnSave_Click" />
改成库户端Input
<input type="button" value="确定" onclick="test();" />
function test()
{
var obj=document.getElementById("<%=ddl.ClientID %>");
var str=obj.options[obj.selectedIndex].text;
document.getElementById("<%=lnkbtnSelect.ClientID%>").childNodes[0].nodeValue=str;
}
说明:
1.因TabContainer中用到了 ScriptManager,所以我的控件中没有加 ScriptManager
2.控件中用到的 StyleSheet.css,你安装完toolkit后自己的机器中能找到,放到同一目录下即可.
3.我的代码测试无任何问题,你的如果还是不行就找找别的原因.
控件代码如下:
ControlTest.ascx
<%@ Control Language="C#" AutoEventWireup="true" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %><script runat="server"> protected void Button3_Click(object sender, EventArgs e)
{
this.LinkButton1.Text = this.DropDownList1.SelectedItem.Text;
}
</script><link href="StyleSheet.css" rel="stylesheet" type="text/css" />
<asp:LinkButton ID="LinkButton1" runat="server">Login</asp:LinkButton>
<asp:Panel ID="Panel1" runat="server" Height="129px" Width="250px" Style="display: none" CssClass="modalPopup">
<table width="100%" style="height:100%; width: 100%;" id="TABLE1">
<tr>
<td style="width: 38px; height: 24px;">
测试</td>
<td style="text-align: left; height: 24px;">
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Selected="True" Value="a">aaa</asp:ListItem>
<asp:ListItem Value="b">bbb</asp:ListItem>
<asp:ListItem Value="c">ccc</asp:ListItem>
<asp:ListItem Value="d">ddd</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button3" runat="server" Text="test" OnClick="Button3_Click" />
</td>
<td style="width: 3px; height: 24px;"></td>
</tr>
</table>
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:Button ID="Button2" runat="server" Text="Cancle" />
</asp:Panel>
<br />
<cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
TargetControlID="LinkButton1"
PopupControlID="Panel1"
BackgroundCssClass="modalBackground"
OkControlID="Button1"
CancelControlID="Button2"
DropShadow="true">
</cc1:ModalPopupExtender>
放置控件的测试页代码如下:
FormTest.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FormTest.aspx.cs" Inherits="FormTest" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Src="ControlTest.ascx" TagName="ControlTest" TagPrefix="uc1" %><!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>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<script type="text/javascript">
function PanelClick(sender, e) {
var Messages = $get('<%=Messages.ClientID%>');
Highlight(Messages);
} function ActiveTabChanged(sender, e) {
var CurrentTab = $get('<%=CurrentTab.ClientID%>');
CurrentTab.innerHTML = sender.get_activeTab().get_headerText();
Highlight(CurrentTab);
} var HighlightAnimations = {};
function Highlight(el) {
if (HighlightAnimations[el.uniqueID] == null) {
HighlightAnimations[el.uniqueID] = AjaxControlToolkit.Animation.createAnimation({
AnimationName : "color",
duration : 0.5,
property : "style",
propertyKey : "backgroundColor",
startValue : "#FFFF90",
endValue : "#FFFFFF"
}, el);
}
HighlightAnimations[el.uniqueID].stop();
HighlightAnimations[el.uniqueID].play();
}
function ToggleHidden(value) {
$find('<%=TabContainer1.ClientID%>').get_tabs()[2].set_enabled(value);
}
</script>
<cc1:TabContainer ID="TabContainer1" runat="server" Height="150px">
<cc1:TabPanel runat="Server" ID="Panel1" HeaderText="Signature and Bio">
<ContentTemplate>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table>
<tr>
<td>Signature:</td>
<td><asp:TextBox ID="signatureText" runat="server" /></td>
</tr>
<tr>
<td>Bio:</td>
<td><asp:TextBox ID="bioText" runat="server" /></td>
</tr>
</table>
<asp:Button ID="Button3" runat="Server" Text="Save" />
<br /><br />
Hit Save to cause a postback from an update panel inside the tab panel.<br />
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</cc1:TabPanel>
<cc1:TabPanel runat="Server" ID="Panel3" HeaderText="Email" >
<ContentTemplate>
Email: <asp:TextBox ID="emailText" runat="server" />
<br /><br />
<asp:Button ID="Button1" runat="Server" Text="Save" />
<br /><br />
Hit Save to cause a full postback.
</ContentTemplate>
</cc1:TabPanel>
<cc1:TabPanel runat="Server" ID="Panel2" HeaderText="Controls">
<ContentTemplate>
<div>Controls authored by Toolkit User (read-only - demo purposes):</div>
<ul>
<li>Calendar</li>
<li>MaskedEdit</li>
<li>Accordion</li>
<li>Calendar</li>
<li>Calendar</li>
<uc1:ControlTest ID="ControlTest1" runat="server" />
</ul>
<br />
</ContentTemplate>
</cc1:TabPanel>
</cc1:TabContainer>
<asp:Label ID="Messages" runat="server"></asp:Label>
<asp:Label ID="CurrentTab" runat="server"></asp:Label>
</form>
</body>
</html>