Asp.net ASP-WebForm中基于插件(UserControl)的系统实现

Asp.net ASP-WebForm中基于插件(UserControl)的系统实现,asp.net,user-controls,asp.net-placeholder,Asp.net,User Controls,Asp.net Placeholder,我有许多UserControls,我想在一个aspx页面中根据querystring加载它们 我有以下两种方法: 在aspx页面和page\u Load/page\u Render事件中添加占位符: UserControl uc = (UserControl)LoadControl("/PATH/ProductGroups.ascx"); phMain.Controls.Add(uc); 添加MasterPage,然后添加aspx并使用MasterPage,然后在aspx 但在这两种情况下,

我有许多
UserControls
,我想在一个
aspx
页面中根据
querystring
加载它们

我有以下两种方法:

  • aspx
    页面和
    page\u Load/page\u Render
    事件中添加
    占位符

    UserControl uc = (UserControl)LoadControl("/PATH/ProductGroups.ascx");
    phMain.Controls.Add(uc);
    
  • 添加
    MasterPage
    ,然后添加
    aspx
    并使用MasterPage,然后在
    aspx

  • 但在这两种情况下,我都犯了以下错误:

    The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.
    
    顺便说一句,我在加载的
    UserControl
    中使用了
    telerik TextEditor

    我怎么办

    我想我唯一的办法是,每个
    UserContorl
    有多个
    aspx
    ,没有
    MasterPage
    ,这太糟糕了,你知道的!因为我必须在所有页面中逐个修复
    HTML/CSS/JS
    ,这不是专业版

    注意:如果不使用
    telerik TextEditor
    ,一切正常,但我需要这个,而且这个wat(在
    占位符中加载
    UserControl
    )也不是很好的方法


    我正在寻找类似DNN的内容。

    我试图复制此错误,但无法复制。这对我来说很好。以下是我在VS2013中尝试的内容

    1) 添加母版页

        <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="Test.Site1" %>
    
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
            <telerik:RadScriptManager ID="RadScriptManager1" runat="server"></telerik:RadScriptManager>
            <div>
                <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </form>
    </body>
    </html>
    

    “无法修改控件集合”错误的解决方法是什么?

    请使用占位符(无母版页)测试代码。是,这对我来说也很好。若您并没有使用母版页,那个么请确保在表单标签内的那个页上添加telerik:RadScriptManager。如果仍然出现相同的错误“控件集合无法修改”,请确保标题标记的格式为“否,我用ckeditor替换了telerik texteditor,并使用了母版页,但谢谢!
    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="Test.WebUserControl1" %>
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <telerik:RadEditor  runat="server" ID="RadEditor1" SkinID="DefaultSetOfTools" Height="675px">
    </telerik:RadEditor>
    
    <%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="Test.WebForm3" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <asp:PlaceHolder runat="server" ID="phMain" />
    </asp:Content>
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Test
    {
        public partial class WebForm2 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                UserControl uc = (UserControl)LoadControl("~/WebUserControl1.ascx");
                phMain.Controls.Add(uc);
            }
        }
    }