<pages> <namespaces> <add namespace="System.Web.Optimization" /> </namespaces> <controls> <add tagPrefix="uc1" src="~/Controls/bt.ascx" tagName="bt" /> </controls> </pages>
<%@ Register Src="~/Controls/bt.ascx" TagName="bt" TagPrefix="uc1" %>
<uc2:index_lovexin12 ID="index_lovexin121" runat="server" />
只知道用户控件是如何引入进来的<%@ Register ...%><uc1: ......> 。但不知道它是如何运行,如何被解析的。
在.aspx页面上这样做是正确的。但你在代码中拼出来<uc1:...>就不对了。为什么?你在后台拼出来渲染到页面上的时候,html页面中只是显示字符串"<uc1:...>"而矣。最终并未被asp.net解析(也就是并未生成用户控件中的内容)。所以你什么也没有看到。正确的做法是动态加载用户控件。你可以在目标位置放置一个容器控件如PlaceHolder,可以使用UserControl uc=Page.LoadControl("XX.ascx"); 来生成一个用户控件的实例,然后再作为子控件加入到容器控件中 ,完整的代码类似:
//假设页面上放置的容器控件PlaceHolder的控件ID为pl
UserControl uc;
if (Reqest["id"]=="1") {
uc=Page.LoadControl("1.ascx");
}else if (Request["id"]=="2") {
uc=Page.LoadControl("2.ascx");
}
//添加到容器控件
pl.Add(uc);
Controls_news news = LoadControl("/Controls/news.ascx") as Controls_news; news.loadlist(sender, e); news.ID = "News1"; div01.Controls.Clear(); div01.Controls.Add(news);
传参
ascx.cs private string _abc; public string abc { get { return _abc; } set { _abc = value; } } protected void Page_Load(object sender, EventArgs e) { Button1.Text = abc; } 调用页 <uc1:bt ID="Bt1" abc="sdfdesfg" runat="server" />
动态传参 <uc1:bt ID="Bt1" abc='<%#Eval("Id") %>' runat="server" />
abc='<%#Eval("Id") %>'要用单引号