ASP.NET AJAX UpdatePanel и проблема с вставкой динамического HTML (Telerik)

Итак, у меня есть проблема. В настоящее время я работаю над проектом, использующим инфраструктуру Telerik для ASP.NET AJAX, хотя это не должно иметь большого значения, так как я полностью (почти) обхожусь с Telerik в этой части работы.

Я собираю программу чата, похожую на Facebook, в систему CRM нашей компании, и, хотя все дошло до этого момента, я наткнулся на контрольно-пропускной пункт. Проблема в том, когда я пытаюсь «создать новый чат». Я использую элемент управления asp UpdatePanel в сочетании с вызовом jQuery $ .ajax для передачи имени метода JSON в мой код за файлом. Вот логика JSON:

DoubleClick на пользователя в списке пользователей:

$telerik.$(".UserListEntry").dblclick(function () {
                var ToName = $telerik.$(this).children(".UserListEntryName").text();
                var FromName = $telerik.$("#lkUserGeneralSettings").text();
                $telerik.$.ajax({
                    type: 'POST',
                    url: 'DefaultHandler.ashx',
                    data: { "ToName": ToName, "FromName": FromName },
                    success: CreateChatBox(),
                    error: function (response) { alert("error: 001"); }
                });
            });

Обратный вызов CreateChatBox:

function CreateChatBox() {
            $telerik.$.ajax({
                type: 'POST',
                url: 'Default.aspx',
                data: { MethodName: "CreateChatBox" },
                success: ForceAsyncPostback,
                error: function (response) { alert("error: 002"); }
            });
        }

Принудительно вызывать asyncpostback (не обязательно, но это даже не работает!):

function ForceAsyncPostback() {
            var UpdatePanel1 = '<%=Panel3.ClientID%>';

            if (UpdatePanel1 != null) {
                __doPostBack(UpdatePanel1, '');
            }
            alert("Success");
        }

UpdatePanel создается с помощью различных литералов и некоторых жестко запрограммированных HTML-тегов. Проблема вНЕ с динамическим созданием указанных элементов, это работает просто отлично. На самом деле мой код (который я опубликую ниже) создает и отображает все отлично, если я помещаю его в событие PageLoad.

Во всяком случае,вот .aspx:

<asp:UpdatePanel ID="Panel3" runat="server" OnLoad="Panel3_Load" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Literal ID="ChatBoxesLiteralTop" runat="server" />
                    <asp:Literal ID="ChatBoxesLiteralMid" runat="server" />
                    <asp:PlaceHolder ID="ChatBoxesPlaceHolder" runat="server" />
                    <asp:Literal ID="ChatBoxesLiteralBot" runat="server" />
                    <div id="UserListCorner">
                        <img id="UserListBtn" src="images/list.png" />
                    </div>
                    <div id="UserList" class="UserListHidden">
                        <div id="UserListView">
                            <asp:Literal ID="UserListViewLiteral" runat="server" />
                        </div>
                    </div>
                </ContentTemplate>
            </asp:UpdatePanel>

Код позади:

protected void Panel3_Load(object sender, EventArgs e)
    {
        #region Ajax methods
        if (Request.Form["MethodName"] == "CreateChatBox")
        {
            CreateChatBox();
        }
        #endregion

        Engine m_engine = new Engine();
        string m_sql = @"SELECT FullName FROM Users WHERE RecordDeleted <> 1";
        DataTable dt = m_engine.GetObjectsAsDataTable(m_sql);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            UserListViewLiteral.Text += "<div class='UserListEntry'><span class='UserListEntryStatus'><img src='images/status-online.png' width='10' /></span>&nbsp;<span class='UserListEntryName'>" + dt.Rows[i]["FullName"].ToString() + "</span></div>";
        }

        RadAjaxManager.GetCurrent(Page).ResponseScripts.Add("ChatAjax()");   
    }

    private void CreateChatBox()
    {
        ChatBoxesLiteralTop.Text = @"<div id='ChatBox' class='ChatBoxHidden'>
                                        <div class='ChatBoxHeader'>
                                            <img id='ChatBoxStatusBtn' src='Images/status-online.png' />
                                            <span id='ChatBoxUserLabel'>John Doe</span>
                                            <img id='closeBtn' src='Images/close.png' />
                                            <img id='toggleTab' src='Images/up-arrow.png' />
                                        </div>
                                        <div id='ChatBoxMessageOutput'></div><div class='ChatBoxFooter'>";

        TextBox txt = new TextBox();
        txt.ID = "ChatBoxMessageInput";
        txt.Height = 16;
        txt.MaxLength = 270;
        txt.Width = 250;
        txt.AutoPostBack = false;
        ChatBoxesPlaceHolder.Controls.Add(txt);

        RadButton btn = new RadButton();
        btn.ID = "ChatBoxSendButton";
        btn.Text = "Send";
        btn.AutoPostBack = true;
        btn.Height = 22;
        btn.Click += ChatBoxSendButton_Click;
        ChatBoxesPlaceHolder.Controls.Add(btn);

        ChatBoxesLiteralBot.Text = "</div></div>";

        Panel3.Update();

        RadAjaxManager.GetCurrent(Page).ResponseScripts.Add("ChatAjax()");
    }

Я, конечно, упускаю из виду что-то невероятно глупое, но свежий взгляд от опытного ASP.Net Ajaxer был бы очень признателен! Заранее спасибо.

Разъяснение вопроса

Что работает:

Код работает правильно.Метод JSON передается коду позади и читается.Метод CreateChatBox () проходит и предположительно заполняет литералы и элементы управления.Все обратные вызовы в цепочке JSON успешно выполнены.

Что НЕ работает:

UpdatePanel даже после избыточной обратной передачи не имеет этого нового HTML-кода после успешного выполнения кода.

Ответы на вопрос(1)

Ваш ответ на вопрос