ASP WebForm中基于Implementation Plugin(UserControl)的系统

时间:2015-08-13 13:30:59

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

我有很多UserControls,我想在一个query string页面中依赖aspx加载它们。

我厌倦了两种方式:

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

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

  3. 上注册aspx

    但两者都有以下错误:

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

    顺便说一句,我在加载的telerik TextEditor中使用了UserControl

    我该如何处理?

    我认为我拥有的唯一方式是aspx每个UserContorl,而不是MasterPage,这很糟糕,如你所知!因为我必须在所有页面中逐个修复HTML/CSS/JS,这不是专业的!

    注意:不使用telerik TextEditor,一切正常,但我需要这个,这个wat(在UserControl中加载PlaceHolder)并不是一个好方法。

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

1 个答案:

答案 0 :(得分:1)

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

Here是错误的解决方法&#34;无法修改控件集合&#34;