在ASP WebForm中实现基于插件(UserControl)的系统



我有很多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

我该如何处理?

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

注意:没有使用telerik TextEditor,一切都工作得很好,但我需要这个,也这个wat(在PlaceHolder中加载UserControl)不是真正的好方法。

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

我试图复制这个错误,但我不能。这对我来说很好。以下是我在VS2013中尝试的。

1)添加MasterPage

    <%@ 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)添加WebForm
<%@ 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);
        }
    }
}

下面是错误"Control collection cannot be modified"的解析图

相关内容

  • 没有找到相关文章

最新更新