c#关于自定义WebUserControl的加载

来源:百度知道 编辑:UC知道 时间:2024/05/26 05:18:11
问一个ASP.NET关于自定义WebUserControl动态加载的问题:
我写了一个ASP.NET的WebUserControl,里面有一个服务器控件DropDownList,现在我把这个用户控件动态加载到网页上去(注意是动态加载,不是“拖”进去)
protected void Page_Init(object sender, EventArgs e)
{
WUC_LawList c = (WUC_LawList)LoadControl("WUC_LawList.ascx");
this.Controls.Add(c);
}
但是报错,说类型“DropDownList”的控件“ctl02_ddl_Page”必须放在具有 runat=server 的窗体标记内。

放在Page_Load中也不行,怎么回事呢?
请注意我是在代码里加载的,不是靠“拖”的,我想解决的问题也是如何“动态加载”时候不会出现这样的情况。

你在哪里加载都一样.

因为是服务器控件.所以必须放在<form runat=server></form>标签中.

这个没有办法.是.NET的机制.

而在用户控件中是不能有<form>的.所以你必须保证在使用该用户控件的

页面中有<form runat=server>

先把页面代码改为<form runat=server></form>
然后pageload事件里面写:
//动态加载用户控件
Control con = LoadControl("WebUserControl.ascx");
con.ID = "webcon";
this.form1.Controls.Add(con);
//获取用户控件对象:
Control c=this.form1.FindControl("webcon");
//获取用户控件的子控件对象:
DropDownList drop=(DropDownList)c.FindControl("DropDownList1");
drop.Visible=false;
完事。。。

如果你的Page的Form的服务标签,你可以
WUC_LawList c = (WUC_LawList)LoadControl("WUC_LawList.ascx");
parent.Controls.Add(c);//parent必须是form本身或是form内的服务器容器控件

如果你没有Form标签,必须在page上重写

public override void VerifyRenderingInServerForm(Control control)
{
//什么也不做
}

Page.Form.Controls.Add(c);