代码改变世界

动态加载并获取usercontrol生成的html

2013-01-06 17:58  sql_manage  阅读(1340)  评论(0编辑  收藏  举报

    在项目中用户控件往往是html代码的生成工具,在aspx页面中添加其引用就可以获取它所生成的html代码

    以供显示。但如何在后台代码.cs文件中动态的加载并获取其html代码就不容易了,以下是我研究的心得。

    方案一: 在用户控件中添加公共属性和公共方法以供外部程序调用。

 

ddl.ascx.cs code:

public
partial class ddl : System.Web.UI.UserControl { public List<string> sourceList { get; set; } //公共属性 public void setValue() //公共方法 { List<string> currentSource = this.sourceList; foreach (string str in currentSource) { ListItem item = new ListItem(); item.Value = str; item.Text = str; _ddl.Items.Add(item); } } }
 
userControlTest.aspx.cs code:

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List<string> testList=new List<string> (); testList.Add("xiaochun"); testList.Add("xiaochun"); testList.Add("xiaochun"); testList.Add("xiaochun"); testList.Add("xiaochun"); StringWriter sw = new StringWriter(); HtmlTextWriter writer = new HtmlTextWriter(sw); UserControl userControl = new UserControl(); string pathString = "/usercontrol/ddl.ascx"; //注意这里不能为绝对路径 ddl currentControl= userControl.LoadControl(pathString) as ddl; currentControl.sourceList = testList; //调用公共属性 currentControl.setValue(); //调用公共方法 if (currentControl is ddl) { currentControl.RenderControl(writer); Response.Write( sw.ToString()); } } }

   方案二:采用一个公共类A去继承 System.Web.UI.UserControl,然后再在其中添加接口。然后usercontrol去继承这个公共类A然后

              再去实现类A中的接口。

             公共类 BaseQueryControl

    public abstract class BaseQueryControl:UserControl  //注意这里要继承UserControl
    {
        public abstract void SetDataSourceBind(object source); //这里是接口
    }

            用户控件

 public partial class EnumeratorControl : BaseQueryControl //继承公共类
    {public override void SetDataSourceBind(object source) //重载方法
        {
            if (source!=null)
            {
                this.ddl.DataSource = source;
                this.ddl.DataBind();                
            }
        }
}

 

              这样做有一个好处,就是可以统一管理继承了类A的所以usercontrol。