Hello,
I have a problem with the RadToolTipManager and ASP.NET Server Controls. The control which is loaded in the tooltip doesn’t update its label after the button click. I tested the same setup with an aspx page and a ascx user control, in this case everything works as expected.
Do you have any idea where I did something wrong? I used this example as a reference http://demos.telerik.com/aspnet-ajax/tooltip/examples/loadondemand/defaultcs.aspx. In the end, I would like to update the control on which the tooltip originated, but because the events in the tooltip itself don’t work, I haven’t tried that yet.
Thanks
Setup:
The Default.aspx file is nested within a master-page with a RadScriptManager, I used the Telerik.Web.UI.dll version 2011.1.519.35
Codes:
Default.aspx
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="AjaxTooltipRad._Default" %>
<%@ Register TagPrefix="tt" Assembly="AjaxTooltipRad" Namespace="AjaxTooltipRad.src" %>
<
asp:Content
ID
=
"BodyContent"
runat
=
"server"
ContentPlaceHolderID
=
"MainContent"
>
<
h2
>
Tooltip Test
</
h2
>
<
p
><
tt:GalleryControl
runat
=
"server"
/></
p
>
</
asp:Content
>
using
System;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Web.UI;
namespace
AjaxTooltipRad.src {
public
class
GalleryControl : Control, INamingContainer {
public
const
string
RTTMID =
"rttmid"
;
public
const
string
IMGID =
"imgid"
;
private
RadToolTipManager rttm;
private
Image img;
public
GalleryControl() :
base
() {
rttm =
new
RadToolTipManager();
rttm.ID = RTTMID;
rttm.Position = ToolTipPosition.BottomCenter;
rttm.RelativeTo = ToolTipRelativeDisplay.Element;
rttm.Width =
new
Unit(
"300px"
);
rttm.Height =
new
Unit(
"200px"
);
rttm.HideEvent = ToolTipHideEvent.LeaveTargetAndToolTip;
rttm.AjaxUpdate +=
new
ToolTipUpdateEventHandler(rttm_AjaxUpdate);
rttm.Skin =
"Default"
;
rttm.RenderInPageRoot =
true
;
img =
new
Image();
img.ID = IMGID;
rttm.TargetControls.Add(img.ClientID,
false
);
}
private
void
rttm_AjaxUpdate(
object
sender, ToolTipUpdateEventArgs e) {
UpdateToolTip(e.UpdatePanel);
}
private
void
UpdateToolTip( UpdatePanel panel) {
ServerControlToolTip sctt =
new
ServerControlToolTip();
panel.ContentTemplateContainer.Controls.Add(sctt);
}
protected
override
void
OnLoad(EventArgs e) {
base
.OnLoad(e);
this
.Controls.Add(rttm);
this
.Controls.Add(img);
}
}
}
using
System;
using
System.Web.UI;
using
System.Web.UI.WebControls;
namespace
AjaxTooltipRad.src {
public
class
ServerControlToolTip : Control, INamingContainer {
private
const
string
textboxId =
"textboxid"
;
private
const
string
buttonId =
"buttonid"
;
private
const
string
labelId =
"labelid"
;
private
TextBox textBox;
private
Button button;
private
Label label;
public
ServerControlToolTip() {
textBox =
new
TextBox();
textBox.ID = textboxId;
button =
new
Button();
button.Text =
"click"
;
button.ID = buttonId;
button.Click +=
new
EventHandler(button_Click);
label =
new
Label();
label.ID = labelId;
}
private
void
button_Click(
object
sender, EventArgs e) {
label.Text = textBox.Text;
}
protected
override
void
OnLoad(EventArgs e) {
base
.OnLoad(e);
this
.Controls.Add(textBox);
this
.Controls.Add(button);
this
.Controls.Add(label);
}
}
}
<style type=
"text/css"
>
#<%= StartTime.ClientID %>_timeView_wrapper {
overflow
:
auto
;
width
:
83px
;
height
:
200px
;
}
</style>
<
telerik:RadTimePicker
runat
=
"server"
ID
=
"StartTime"
CssClass
=
"rsAdvTimePicker"
Width
=
"78px"
>
<
dateinput
id
=
"DateInput3"
runat
=
"server"
emptymessagestyle-cssclass
=
"riError"
emptymessage
=
" "
/>
<
timepopupbutton
visible
=
"false"
/>
<
timeview
id
=
"TimeView1"
runat
=
"server"
columns
=
"1"
showheader
=
"false"
starttime
=
"00:00"
endtime
=
"23:59"
interval
=
"00:30"
/>
</
telerik:RadTimePicker
>
protected
void
rbTestMailVersturen_Click(
object
sender, EventArgs e) {
string
query =
""
;
teller = 0;
SaveMailingForm();
RadGrid emailgrid =
new
RadGrid();
PlaceHolder1.Controls.Add(emailgrid);
//Fill a list with emailadresses
FillEmailadressen();
for
(
int
i = 0; i < emailadressen.Count; i++) {
{
using
(conn =
new
SqlConnection(ConnectionString)) {
conn.Open();
emailgrid.DataSource =
null
;
emailgrid.Rebind();
string
ID = Request.QueryString[
"id"
].PadLeft(2,
'0'
);
query =
"SELECT * FROM A_MAN_"
+ ID +
" WHERE EMAILCOLUMN ='"
+ emailadressen[i] +
"'"
;
SqlDataAdapter da =
new
SqlDataAdapter(query, conn);
DataTable dt =
new
DataTable();
da.Fill(dt);
emailgrid.DataSource = dt;
emailgrid.Rebind();
emailgrid.GridExporting +=
new
OnGridExportingEventHandler(emailgrid_GridExporting);
switch
(rcbExportType.SelectedItem.Text) {
case
"CSV"
:
emailgrid.MasterTableView.ExportToCSV();
break
;
case
"Excel"
:
emailgrid.MasterTableView.ExportToExcel();
break
;
case
"PDF"
:
emailgrid.MasterTableView.ExportToPdf();
break
;
case
"Word"
:
emailgrid.MasterTableView.ExportToWord();
break
;
}
}
}
}
}
protected
void
emailgrid_GridExporting(
object
source, GridExportingArgs e) {
string
filename = DateTime.Now.Year +
"-"
+ DateTime.Now.Month +
"-"
+ DateTime.Now.Day + rtbOnderwerp.Text + teller +
"."
;
switch
(rcbExportType.SelectedItem.Text) {
case
"CSV"
:
filename +=
"csv"
;
break
;
case
"Excel"
:
filename +=
"xls"
;
break
;
case
"PDF"
:
filename +=
"pdf"
;
break
;
case
"Word"
:
filename +=
"doc"
;
break
;
}
string
path = Server.MapPath(
"~/"
+ filename);
using
(FileStream fs = File.Create(path)) {
Byte[] info = System.Text.Encoding.Default.GetBytes(e.ExportOutput);
fs.Write(info, 0, info.Length);
}
MailMessage msg =
new
MailMessage();
MailAddress From =
new
MailAddress(
"info@xxxxxxxxxxxx.nl"
,
"info@xxxxxxxxxxxx.nl"
);
msg.From = From;
msg.Subject = rtbOnderwerp.Text;
msg.Body = rtbMailtekst.Text;
msg.To.Add(
new
MailAddress(emailadressen[teller]));
teller++;
Attachment at =
new
Attachment(Server.MapPath(
"~/"
+ filename));
msg.Attachments.Add(at);
SmtpClient client =
new
SmtpClient(
"localhost"
);
client.Send(msg);
msg.Dispose();
FileInfo fi =
new
FileInfo(Server.MapPath(
"~/"
+ filename));
fi.Delete();
if
(teller == emailadressen.Count)
Response.Redirect(Request.Url.ToString());
}
<
telerik:RadAsyncUpload
ID
=
"RadAsyncUpload1"
runat
=
"server"
Skin
=
"Black"
CssClass
=
"button"
>
<
Localization
Select
=
"Almost 50 chars long text"
/>
</
telerik:RadAsyncUpload
>
/// <summary>
/// Creates a RadSplitter and places the two panes it will hold onto it.
/// In addition, sets those panes dimensions such that they are appropriate for
/// the orientation of the RadSplitter.
///
/// I divide height and width in half because there are two panes.
/// </summary>
/// <returns> The rad splitter. </returns>
public
static
CormantRadSplitter CreateNewContent(Orientation orientation, RadPane parent)
{
Logger.InfoFormat(
"Creating new content to be placed upon: {0}"
, parent.ID);
CormantRadSplitter splitter =
new
CormantRadSplitter(orientation);
CormantRadPane firstPane =
new
CormantRadPane();
CormantRadDockZone firstDockZone =
new
CormantRadDockZone();
firstPane.Controls.Add(firstDockZone);
splitter.Controls.Add(firstPane);
CormantRadPane secondPane =
new
CormantRadPane();
splitter.Controls.Add(
new
CormantRadSplitBar(orientation, firstPane.ID, secondPane.ID));
CormantRadDockZone secondDockZone =
new
CormantRadDockZone();
secondPane.Controls.Add(secondDockZone);
splitter.Controls.Add(secondPane);
switch
(orientation)
{
case
Orientation.Horizontal:
firstPane.PanePosition = PanePositions.Top;
secondPane.PanePosition = PanePositions.Bottom;
//firstPane.Height = secondPane.Height = new Unit(parent.Height.Value / 2, UnitType.Pixel);
//firstPane.Width = secondPane.Width = parent.Width;
break
;
case
Orientation.Vertical:
firstPane.PanePosition = PanePositions.Left;
secondPane.PanePosition = PanePositions.Right;
//firstPane.Height = secondPane.Height = parent.Height;
//firstPane.Width = secondPane.Width = new Unit(parent.Width.Value / 2, UnitType.Pixel);
break
;
}
return
splitter;
}