动态添加用户控件的问题
//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>
<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