UserControl 用户定义组件

<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") %>'要用单引号
上一篇:MVC数据库数据分页显示


下一篇:python中的内置函数(一), lambda, filter, map