【问题标题】:Implementation Plugin (UserControl) based system in ASP WebFormASP WebForm 中基于实现插件(UserControl)的系统
【发布时间】:2015-11-06 12:12:04
【问题描述】:

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

我厌倦了以下两种方式:

  1. aspx 页面和Page_Load/Page_Render 事件中添加Placeholder

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

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

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,一切正常,但我需要这个,还有这个(在PlaceHolder 中加载UserControl)不是很好的方法。

我正在寻找 DNN 之类的东西。

【问题讨论】:

    标签: asp.net user-controls asp.net-placeholder


    【解决方案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);
            }
        }
    }
    

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

    【讨论】:

    • 能否请您测试您的代码,使用占位符(无母版页)
    • 是的,这对我来说也很好用。如果您不使用母版页,请确保在表单标签内的该页面上添加 telerik:RadScriptManager。如果您仍然收到相同的错误“无法修改控件集合”,请确保 head 标签的格式为“”
    • 不,我用ckeditor替换了telerik texteditor,并使用了母版页,但是谢谢!
    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 2011-01-12
    • 2015-04-16
    • 1970-01-01
    • 2023-03-13
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多