2012-07-11 92 views
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腳本是下面:需要在servercontrolCreateChildControls功能被添加

<%@ 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> 

回答

1

UpdatePanel。以便它可以作爲更新面板註冊到ScriptManager。在使用RenderContents函數進行渲染時,只會在ServerControl中添加UpdatePanel的html。

+0

我刪除了RenderContents函數,並在CreateChildControls中創建了所有控件。爲什麼當CreateChildControls工作時,大多數服務器控件示例都會顯示使用RenderContents創建的控件?有什麼好處?很好,謝謝。 – deDogs 2012-07-11 13:37:46

+0

RenderContents函數具有它可以跳過控件存儲在「ViewState」中的優點,控件的Html可以直接控制。 – Bharath 2012-07-12 05:44:58