1
創建ASP.NET AJAX服務器控件。重寫RenderContents方法,我放在下面所示的代碼:ASP.NET AJAX服務器控件中的UpdatePanel
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);
}
編譯控制拖放它放到Web窗體頁,我發現,在UpdatePanel doen't工作。 UpdatePanel中的按鈕單擊時,不會異步執行完整的回發。
沒有成功,我一直在網上尋找答案。
我想知道如果在AJAX服務器控件中有一個UpdatePanel是個好主意。我已經成功使用UserControl執行這個模擬器任務。
HTML腳本是下面:需要在servercontrol
在CreateChildControls
功能被添加
<%@ 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>
我刪除了RenderContents函數,並在CreateChildControls中創建了所有控件。爲什麼當CreateChildControls工作時,大多數服務器控件示例都會顯示使用RenderContents創建的控件?有什麼好處?很好,謝謝。 – deDogs 2012-07-11 13:37:46
RenderContents函數具有它可以跳過控件存儲在「ViewState」中的優點,控件的Html可以直接控制。 – Bharath 2012-07-12 05:44:58