Spider024

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

<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") %>'要用单引号

 

posted on 2013-06-19 12:09  Spider024  阅读(334)  评论(0编辑  收藏  举报