兩個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;
}
}