UpdatePanel in a ASP.NET AJAX Server Control
-
20-06-2021 - |
Question
Creating an ASP.NET AJAX Server Control. Overriding the RenderContents method, I placed in this code shown below:
protected override void RenderContents(HtmlTextWriter writer)
{
var updatePanel = new UpdatePanel();
updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
updatePanel.ClientIDMode = ClientIDMode.AutoID;
updatePanel.ID = "CaptchaUpdatePanel";
updatePanel.ChildrenAsTriggers = true;
//var placeHolder = new PlaceHolder();
var hiddenField = new HiddenField();
hiddenField.ID = "captchaKey";
updatePanel.ContentTemplateContainer.Controls.Add(hiddenField);
var panel = new Panel();
panel.ID = "Captcha";
var imgButton = new ImageButton();
imgButton.ID = "RefreshCaptcha";
imgButton.TabIndex = 0;
imgButton.AlternateText = "Refresh Captcha Characters";
imgButton.ImageUrl = RefreshButtonPath;
imgButton.Width = 36;
imgButton.Height = 36;
panel.Controls.Add(imgButton);
updatePanel.ContentTemplateContainer.Controls.Add(panel);
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = "CaptchaRefresh";
trigger.EventName = "Click";
updatePanel.Triggers.Add(trigger);
updatePanel.ContentTemplateContainer.RenderControl(writer);
base.RenderContents(writer);
}
Compiling the Control and dropping it onto a Web Forms page, I find that the UpdatePanel doen't work. The button inside the UpdatePanel, when clicked, performs a complete postback not asynchronously.
Without success, I have been searching the web for an answer.
I'm wondering if it is a good idea to have an UpdatePanel within a AJAX Server Control. I have been successful performing this similer task using a UserControl.
HTML Script is below:
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Register Assembly="CaptchaControl" Namespace="CaptchaControlx" TagPrefix="cc1" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title></title>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}
</script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<form runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<cc1:captcha runat="server" />
</form>
</body>
</html>
Solution
UpdatePanel
needs to be added in servercontrol
at CreateChildControls
function. So that it can be registered to ScriptManager
as a updatepanel. While rendering it in RenderContents
function, result in just html of UpdatePanel to be added in ServerControl.