无法修改 Controls 集合,因为控件包含代码块(即 <% ... %> ),动态添加具有 Masterpages 的控件

Posted

技术标签:

【中文标题】无法修改 Controls 集合,因为控件包含代码块(即 <% ... %> ),动态添加具有 Masterpages 的控件【英文标题】:The Controls collection cannot be modified because the control contains code blocks (i.e. <% … %> ) adding the controls dynamically having Masterpages 【发布时间】:2011-08-22 09:52:11 【问题描述】:

在动态添加具有母版页的控件时,控件包含代码块(即 ),因此无法修改 Controls 集合

我正在尝试将 HiddenField 控件添加到 aspx 页面。我收到下面提到的错误

无法修改 Controls 集合,因为该控件包含代码块(即 )。

当我必须动态添加控件时会发生这种情况。在网上,我发现所有类型的答案都添加

这是我的代码示例,

 HiddenField hndGuid = new HiddenField();
_page.Form.Controls.Add(hndGuid);

任何指针?

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.htmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;

namespace wwwroot.Common


    public class GuidClass
    
        public GuidClass()
        
            //
            // TODO: Add constructor logic here
            //
        

        private string guid;

        public string Guid
        
            get
            
                return guid;
            

            set
            
                guid = value;
            
        
    
    public class Myhandler : System.Web.UI.Page, IHttpModule
    
        Page _page = null;
        HiddenField hndGuid = null;

    Queue<string> temp;
    public Myhandler()
    
        temp=new Queue<string>();
    
    public new void Init(HttpApplication context)
    

        context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
    


    void context_PreRequestHandlerExecute(object sender, EventArgs e)
    

        System.Web.HttpContext _httpContext = System.Web.HttpContext.Current;


        if (_httpContext != null)
        
            _page = _httpContext.Handler as System.Web.UI.Page;

            if (_page != null)
            

                _page.Init += new EventHandler(_page_Init);

                _page.Load += new EventHandler(_page_Load);
                hndGuid = new HiddenField();
                hndGuid.ID = "hndGuid";

            
            else
            
                return;
            
        
        else
        
            return;
        

    

    void _page_Init(object sender, EventArgs e)
    

        _page.Form.Controls.Add(hndGuid);

        if (!_page.IsPostBack)
            hndGuid.Value = Guid.NewGuid().ToString();

    

    void _page_Load(object sender, EventArgs e)
    
        GuidClass currentGuid =new GuidClass();
        currentGuid.Guid = hndGuid.Value;
        System.Web.HttpContext _httpContext = System.Web.HttpContext.Current;

        if (temp.Contains<string>(currentGuid.Guid))
        
            _httpContext.Items.Add("IsRefresh",true);
        
        else
        
            if(!(currentGuid.Guid.Equals(null)||currentGuid.Guid.Equals("")))
                temp.Enqueue(currentGuid.Guid);
            _httpContext.Items.Add("IsRefresh",false);
        
    
    

【问题讨论】:

请同时提供相关标记代码。 ***.com/questions/778952/…***.com/questions/4995274/… 【参考方案1】:

将代码块移动到单独的用户控件中,不需要后面的代码

http://csharpin.blogspot.com/2011/05/about-the-controls-collection-cannot-be.html

【讨论】:

以上是关于无法修改 Controls 集合,因为控件包含代码块(即 <% ... %> ),动态添加具有 Masterpages 的控件的主要内容,如果未能解决你的问题,请参考以下文章

无法修改 Controls 集合,因为该控件包含代码块(即 <% ... %>)。Telerik.Web.UI.RadAjaxControl.MoveUpdatePanel

无法修改 Controls 集合,因为该控件包含代码块(即 <% ...%>)ajax 工具包 html 编辑器

“控件集合无法修改,因为控件包含代码块”

控件集合无法修改,因为控件包含代码块(即 <% ... %>)

控件集合无法修改,因为控件包含代码块(即 <% ... %>)

控件集合无法修改,因为控件包含代码块(即 <% ... %>)