简体   繁体   English

ASP.NET AJAX服务器控件中的UpdatePanel

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM