[英]UpdatePanel in a ASP.NET AJAX Server Control
Creating an ASP.NET AJAX Server Control. 创建一个ASP.NET AJAX服务器控件。 Overriding the RenderContents method, I placed in this code shown below:
覆盖RenderContents方法,我在下面的代码中放入了代码:
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. 编译控件并将其放到Web窗体页面上,我发现UpdatePanel不起作用。 The button inside the UpdatePanel, when clicked, performs a complete postback not asynchronously.
单击UpdatePanel内部的按钮后,将执行完整的回发,而不是异步进行。
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. 我想知道在AJAX服务器控件中包含UpdatePanel是否是一个好主意。 I have been successful performing this similer task using a UserControl.
我已经成功使用UserControl执行了这个类似的任务。
HTML Script is below: HTML脚本如下:
<%@ 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>
UpdatePanel
needs to be added in servercontrol
at CreateChildControls
function. 需要在
CreateChildControls
函数的servercontrol
中添加UpdatePanel
。 So that it can be registered to ScriptManager
as a updatepanel. 这样就可以将其注册为
ScriptManager
的更新面板。 While rendering it in RenderContents
function, result in just html of UpdatePanel to be added in ServerControl. 在
RenderContents
函数中呈现它时,导致仅将UpdatePanel的html添加到ServerControl中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.