首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

动态添加用户控件的有关问题

2012-03-18 
动态添加用户控件的问题//ascx%@ControlLanguage C# AutoEventWireup true CodeFile WebUserCont

动态添加用户控件的问题
//ascx
<%@   Control   Language= "C# "   AutoEventWireup= "true "   CodeFile= "WebUserControl.ascx.cs "   Inherits= "WebUserControl "   %>
<div   style= "background-color:Red;   width:150px;   height:200px; ">
        <asp:Button   ID= "Button1 "   runat= "server "   Text= "Button "   OnClick= "Button1_Click "   />
        <asp:TextBox   ID= "TextBox1 "   runat= "server "> </asp:TextBox>
</div>

//ascx.cs
public   partial   class   WebUserControl   :   System.Web.UI.UserControl
{
        protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                this.Visible   =   true;
        }
        protected   void   Button1_Click(object   sender,   EventArgs   e)
        {
                this.Visible   =   false;
                if   (Session[ "OPENED_FOLDER "]   !=   null)
                {
                        Hashtable   table   =   (Hashtable)Session[ "OPENED_FOLDER "];
                        table.Remove(TextBox1.Text);
                }
        }

        public   string   Name
        {
                set   {   this.TextBox1.Text   =   value;   }
        }
}

//   aspx
<form   id= "form1 "   runat= "server ">
                <asp:ScriptManager   ID= "ScriptManager1 "   runat= "server "   />
                <div>
                        &nbsp; <asp:Button   ID= "Button1 "   runat= "server "   Text= "Button "   OnClick= "Button1_Click "   />
                </div>
                <div   id= "Contents "   runat= "server "> </div>
        </form>

//aspx.cs
public   partial   class   _Default   :   System.Web.UI.Page  
{
        string[]   names   =   new   string[]   {   "123 ",   "456 ",   "789 "   };
        static   int   count   =   0;

        protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                if   (Session[ "OPENED_FOLDER "]   ==   null)


                {
                        Session[ "OPENED_FOLDER "]   =   new   Hashtable();
                }
                else
                {
                        Hashtable   table   =   (Hashtable)Session[ "OPENED_FOLDER "];

                        foreach   (DictionaryEntry   de   in   table)
                        {
                                CreateDisplayFilesFolder(de.Value.ToString());
                        }
                }
        }
        protected   void   Button1_Click(object   sender,   EventArgs   e)
        {
                string   name   =   names[count%3];
                count   ++;
                if   (Session[ "OPENED_FOLDER "]   !=   null)
                {
                        Hashtable   table   =   (Hashtable)Session[ "OPENED_FOLDER "];
                        if   (table[name]   ==   null   )
                        {
                                table[name]   =   name;
                                CreateDisplayFilesFolder(name);
                        }
                }
        }

        void   CreateDisplayFilesFolder(string   name)
        {
                WebUserControl   ctr   =   (WebUserControl)Page.LoadControl( "WebUserControl.ascx ");
                ctr.Name   =   name;
                Contents.Controls.Add(ctr);
        }
}


以上是我写的代码,可以动态添加控件,但总是有问题,有时候控件的click事件绑定不上,比如点了三次页面上的按钮创建了3个控件,但如果点击最开始创建的那个控件的按钮,可以将它关掉,然后再点击别的控件,有时候就不行,必须要点两次,实在不知道是啥原因。只是看到有时候控件上的按钮无法触发与其绑定的click事件

[解决办法]
不明白问题是什么,

ScriptManager 不熟悉,

没有看到 Contents 是虾米


如果不熟悉 asp.net 内在机制的话,如页生命周期,通常应该规避采取动态添加控件的方式,
[解决办法]
疑点:你那ascx中的HastTable并没作用上。


[解决办法]
WebUserControl ctr = (WebUserControl)Page.LoadControl( "WebUserControl.ascx ");
//ctr.Name = name;
ctr.ID= name;
[解决办法]
为什么不用占位符那?
用div好么?
[解决办法]
看下这个对楼主有没有什么帮助:

http://www.cnblogs.com/wljcan/archive/2004/06/14/15604.html

热点排行
Bad Request.