Création d'un contrôle serveur ASP.NET AJAX. Redéfinition de la méthode RenderContents, j'ai placé dans ce code ci-dessous:UpdatePanel dans un contrôle serveur ASP.NET AJAX
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);
}
Compiler le contrôle et la laisser tomber sur une page Web Forms, je trouve que le UpdatePanel doen't travail. Le bouton à l'intérieur du UpdatePanel, lorsqu'il est cliqué, effectue une publication complète non asynchrone.
Sans succès, j'ai cherché sur le web pour une réponse. Je me demande si c'est une bonne idée d'avoir un UpdatePanel dans un contrôle serveur AJAX. J'ai réussi à effectuer cette tâche similaire en utilisant un UserControl.
HTML Script est ci-dessous:
<%@ 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>
J'ai éliminé la fonction RenderContents et créé tous les contrôles dans CreateChildControls. Pourquoi la plupart des exemples de contrôle de serveur montrent-ils des contrôles créés avec RenderContents, lorsque CreateChildControls fonctionne? Des avantages? Fonctionne très bien, merci. – deDogs
La fonction RenderContents présente des avantages tels que le contrôle de saut peut être stocké dans "ViewState", le contrôle Html peut être contrôlé directement. – Bharath