两个WebUserControl之间传值,网上的代码有,直接从UserControl1中定位到UserControl2的写法,偶合性很强,感觉不太好,于是提供另外的写法。
用一个容器Container.aspx来放两个WebUserControl,分别是UC1和UC2。现在假设要从UC1的一个事件触发,把UC1中的一个值传到UC2中。
1.新增一个Class,代码如下:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
//
delegate要寫在共用class中,這樣的話,才可以讓PegatronEvent在不同的頁面都引用到。
public
delegate
void
TreeViewEventHandler(
object
sender, PegatronEvent e);
public
class
PegatronEvent : EventArgs
{
//
構造函數
public
PegatronEvent()
{
}
//
聲明變數
public
string
PegatronDeptId;
}
2.UC1中写入事件
//給這個usercontrol加一個event
public event TreeViewEventHandler DeptInfoHandler;
//TreeView的事件,当然用其他事件都OK。
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
PegatronEvent DeptEvent = new PegatronEvent();
DeptEvent.PegatronDeptId = “我来传东西”;
//以下的事件裏面的參數是一定要寫的,sender可以是某個控件的id,也可以是整個頁面(this);
//DeptEvent也一定要,而且類型一定要是PegatronEvent,因為在App_Code/PegatronEvent.cs已經定義了。
DeptInfoHandler(this, DeptEvent);
}
3.在放两个Usercontrol的页面Container.aspx中加入代码:
*这是整个过程的最关键点,相当于在两个UserControl之间加一个桥梁。
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
public
partial
class
UI_DepartContainer : System.Web.UI.Page
{
protected
void
Page_Load(
object
sender, EventArgs e)
{
UC1.DeptInfoHandler
+=
new
TreeViewEventHandler(UC1_DeptInfoHandler);
}
public
void
UC1_DeptInfoHandler(
object
sender, PegatronEvent e)
{
//
取得UserControl的TreeView返回的部門代碼
UC2.deptid
=
e.PegatronDeptId.ToString();
}
}
4.在UC2中获得值,不多说了,代码如下:
private
string
_deptid;
public
string
deptid
{
get
{
return
_deptid; }
set
{
_deptid
=
value;
}
}