1.动态加载用户控件,并利用反射机制给控件赋值
UserControl uc= (UserControl) LoadControl ("../myUserControl.ascx") ;
Type myusertype = uc.GetType();
PropertyInfo info1 = myusertype.GetProperty("subID");
info1.SetValue(uc , subID , null);
2.利用反射调用控件中的方法,并传值
UserControl uc = (UserControl)PlaceHolder1.Controls[0];
Type userType = uc.GetType();
MethodInfo m = userType.GetMethod("submit");
object[] objParas = new object[1];
objParas[0] = subjectID;
m.Invoke(uc, objParas);
3.在用户控件中触发主页面的事件(事件委托)
①首先,在一aspx页面中包含一用户控件(RaiseControl.ascx),该用户控件内含有一服务器端控件。
②在该用户控件的后台代码中声明事件委托、定义事件成员并添加一事件监视函数。代码如下:
//声明事件委托
public delegate void PageChangeEventHandler(string psDeliver);
//定义事件
public event PageChangeEventHandler MyPageChange;
//监视事件
protected void OnPageChange(string psStr)
{
if (MyPageChange != null)
{
MyPageChange(psStr);
}
}
//在用户控件的按钮事件中,触发已经定义的MyPageChange事件。
protected void btnRaise_Click(object sender, EventArgs e)
{
string _sStr = "你点击了用户控件中的按钮!";
OnPageChange(_sStr);
}
③在其所在的页面中编写相应的处理函数并在页面的Page_Load中将该处理函数绑定到用户控件中定义的MyPageChange事件。
protected void Page_Load(object sender, EventArgs e)
{
//利用+=进行事件委托绑定
ctlRaiseControl.MyPageChange += this.DealwithReceived;
}
/**//// <summary>
/// 为用户控件中MyPageChange事件定义的处理函数
/// </summary>
/// <param name="psReceive"></param>
private void DealwithReceived(string psReceive)
{
lblReceive.Text = psReceive;
}