-1

我有很多UserControls,我想加载它们取决于query string一页aspx

我厌倦了以下两种方式:

  1. 添加页面和Placeholder事件:aspxPage_Load/Page_Render

    UserControl uc = (UserControl)LoadControl("/PATH/ProductGroups.ascx");
    phMain.Controls.Add(uc);
    
  2. 添加一个MasterPage,然后添加一个aspx并使用母版页,然后在UserControl上注册aspx

但在这两种情况下,我都收到以下错误:

The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.

顺便说一句,我已经telerik TextEditor在加载的UserControl.

我该如何处理?

我认为我拥有的唯一方法,多个aspxUserContorl没有MasterPage,这很糟糕,你知道的!因为我必须HTML/CSS/JS一一修复所有页面,这不是专业的!

注意:不使用telerik TextEditor,一切正常,但我需要这个,而且这个 wat(加载UserControlPlaceHolder也不是很好的方法。

我正在寻找像 DNN 这样的东西。

4

1 回答 1

1

我试图复制这个错误,但我做不到。它对我来说很好用。这是我在 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>

2)添加WebUserControl

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

3) 新增网页表格

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

4)加载控件

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);
        }
    }
}

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

于 2015-08-13T15:13:05.400 回答