簡體   English   中英

使用JQuery添加用戶控件時,“對處理程序'System.Web.UI.Page'執行子請求出錯。”

[英]“Error executing child request for handler 'System.Web.UI.Page'.” while adding user control using JQuery

我正在使用JQuery動態加載ASP.NET用戶控件:

function OnSuccess(response) {
    var xmlDoc = $.parseXML(response.d);
    var xml = $(xmlDoc);
    pageCount = parseInt(xml.find("PageCount").eq(0).find("PageCount").text());
    var topics = xml.find("Topics");
    topics.each(function () {
        var table = $("#dvTopics table").eq(0).clone(true);

        var customer = $(this);
        $.ajax({
            type: "POST",
            url: "TopicList.aspx/LoadUserControl",
            data: "{message: '" + topics.find("desid").text() + ",'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) {
                table.append(r.d);
            }
        });
        $("#dvTopics").append(table).append("<br />");

    });

    $("#loader").hide();
}

用戶控制代碼:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TopicRow.ascx.cs" Inherits="TopicRow" %>
<link rel="stylesheet" type="text/css" href="Styles/Global.css" />
<asp:Panel ID="Panel1" runat="server" BorderColor="Maroon" Width="600px" style="margin:0">

            <asp:LinkButton ID="Title" runat="server" Font-Bold="True" Font-Names="Segoe UI Semibold,Segoe UI Light, Tahoma, Geneva, Verdana, sans-serif" Font-Overline="False" ForeColor="Maroon" Text="This is a test title." Font-Size="Larger"></asp:LinkButton>

            <br />

    <asp:Label ID="lblAuthor" runat="server" Text="By: Aishwarya Shiva Pareek" Font-Size="Medium" ForeColor="#666666" Font-Names="Segoe UI Light, Tahoma, Geneva, Verdana, sans-serif"></asp:Label>

        <br />
    <br />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate><div style="float:right; height:32px; width:32px"><asp:UpdateProgress ID="UpdateProgress2" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
            <ProgressTemplate>
                <img alt="Working..." class="auto-style5" src="Images/ajaxloader.gif" width="32px" height="32px" />
            </ProgressTemplate>
        </asp:UpdateProgress></div>
            <div style="font-family:Segoe UI Light, Tahoma, Geneva, Verdana, sans-serif">
        Upvoted By
        <asp:Label ID="lblUp" runat="server" Text="23"></asp:Label>
        &nbsp;| Down voted By
        <asp:Label ID="lblDown" runat="server" Text="2"></asp:Label>
            <br />
            <asp:LinkButton ID="lnkUp" runat="server" ForeColor="#003300" OnClick="lnkSupport_Click">Up Vote</asp:LinkButton>
            &nbsp;
            <asp:LinkButton ID="lnkDown" runat="server" ForeColor="Red">Down Vote</asp:LinkButton>
            &nbsp;
            <asp:LinkButton ID="lnkAddComment" runat="server" ForeColor="Maroon">Add Comment</asp:LinkButton></div>
        </ContentTemplate>
    </asp:UpdatePanel>
    <hr style="color:maroon;"/>
</asp:Panel>

用C#代碼添加用戶控件:

public static string LoadUserControl(string message)
    {
        using (Page page = new Page())
        {
            UserControl userControl = (UserControl)page.LoadControl("TopicRow.ascx");
            (userControl.FindControl("Title") as LinkButton).Text = message;
            page.Controls.Add(userControl);
            using (StringWriter writer = new StringWriter())
            {
                page.Controls.Add(userControl);
                HttpContext.Current.Server.Execute(page, writer, false);
                return writer.ToString();
            }
        }
    }

但是在HttpContext.Current.Server.Execute(page, writer, false); 其顯示: Error executing child request for handler 'System.Web.UI.Page'. 例外。 可能是什么原因?

LoadUserControl服務器端腳本沒有json響應,您需要使用json響應。

拋出異常是因為您正在用戶控件內使用服務器端控件。 ASP.NET要求服務器端控件在表單控件中才能正確呈現它們,否則會引發異常。

要解決此異常,您需要更新代碼,例如:

HtmlForm form = new HtmlForm();
form.Controls.Add(userControl);
pageHolder.Controls.Add(form);

這會將用戶控件呈現在表單內,這可能會出現問題。 我建議您使用沒有更新面板和服務器端事件的更清潔的方法。

問候,Uros

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM