ASP.NET UserControl 通訊的具體實現

來源:互聯網
上載者:User

最近在SharePoint2007中用到了WebPart通訊技術,個人覺得2007版本裡面的ConnectionConsumer和ConnectionProvider沒有2010版本那麼好用,於是換了一種思想去實現通訊:WebPart容器中裝一個UserControl控制項,這樣只要UserControl可以通訊,就實現了WebPart之間通訊。

UserControl是使用者自訂控制項,我們可以在UserControl中注入事件,當一個UserControl觸發某種事件,然後通過事件參數來傳遞資料,讓其他UserControl獲得這個事件傳遞過來的參數,實現通訊。

下面簡單示範一下兩個UserControl進行通訊

建立好一個類,兩個UserControl和一個web頁面。

這裡分別是MyEventAgrs.cs,UCProvider.ascx,UCComsumer.ascx,Default.aspx。

MyEventAgrs.cs代碼如下:

複製代碼 代碼如下:public delegate void MyEventHandle(object sender, MyEventAgrs args);
public class MyEventAgrs : EventArgs
{
public MyEventAgrs() { }
public string MyMsg { get; set; }
}

public delegate void MyEventHandle(object sender, MyEventAgrs args);
public class MyEventAgrs : EventArgs
{
public MyEventAgrs() { }
public string MyMsg { get; set; }
}

如果想傳遞其他對象時就只需要修改MyEventAgrs類的MyMsg方法。這裡須繼承EventArgs抽象類別,用於存放事件參數值,另外需定義一個委託事件,然後在其他的地方使用。

UCProvider.ascx代碼如下:

複製代碼 代碼如下: public partial class UCProvider : System.Web.UI.UserControl
{
public event MyEventHandle myHandle;
protected void Page_Load(object sender, EventArgs e)
{
this.DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);
}
void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
MyEventAgrs myEvent = new MyEventAgrs();
myEvent.MyMsg = DropDownList1.SelectedValue;
myHandle(this, myEvent);
} }

public partial class UCProvider : System.Web.UI.UserControl
{
public event MyEventHandle myHandle;
protected void Page_Load(object sender, EventArgs e)
{
this.DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);
}
void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
MyEventAgrs myEvent = new MyEventAgrs();
myEvent.MyMsg = DropDownList1.SelectedValue;
myHandle(this, myEvent);
} }

這裡在前台頁面中定義了一個DropDownList,並給DropDownList綁定了資料來源,不再羅列前台頁面。我想實現當使用者選擇DropDownList的時候將使用者選擇的DropDownList的值傳遞出去,代碼裡面用myHandle(this, myEvent)來初始化事件。

UCComsumer.ascx代碼如下:

複製代碼 代碼如下: public partial class UCComsumer : System.Web.UI.UserControl
{
public void InitValue(string msg) {
lb.Text = msg;
}
}

public partial class UCComsumer : System.Web.UI.UserControl
{
public void InitValue(string msg) {
lb.Text = msg;
}
}

這裡賦值的時候也可以用屬性來表示,比如:複製代碼 代碼如下: public string UC1Msg
{
get{return this.lb.Text;}
set{this.lb.Text=value;}
}

public string UC1Msg
{
get{return this.lb.Text;}
set{this.lb.Text=value;}
}

如果用這種方式,在引用UserControl的時候就更加方便了:複製代碼 代碼如下:<uc2:ucConsumer runat="server" ID="uc2" UC1Msg="Defalut Value" />

<uc2:ucConsumer runat="server" ID="uc2" UC1Msg="Defalut Value" />

Default.aspx代碼如下:

前台頁面裡面需要註冊UserControl

複製代碼 代碼如下:<%@ Register TagPrefix="uc1" TagName="ucProvider" Src="~/UserControls/UCProvider.ascx" %>
<%@ Register TagPrefix="uc2" TagName="ucConsumer" Src="~/UserControls/UCComsumer.ascx" %>

<%@ Register TagPrefix="uc1" TagName="ucProvider" Src="~/UserControls/UCProvider.ascx" %>
<%@ Register TagPrefix="uc2" TagName="ucConsumer" Src="~/UserControls/UCComsumer.ascx" %>

再引用

複製代碼 代碼如下:<uc1:ucProvider runat="server" ID="uc1" OnmyHandle="uc1_myHandle" />
<uc2:ucConsumer runat="server" ID="uc2" />

<uc1:ucProvider runat="server" ID="uc1" OnmyHandle="uc1_myHandle" />
<uc2:ucConsumer runat="server" ID="uc2" />

後台頁面:複製代碼 代碼如下:protected void uc1_myHandle(object sender, MyEventAgrs args)
{
if (args != null)
{
uc2.InitValue(args.MyMsg);
}
else
uc2.UC1Msg = string.Empty;
}

protected void uc1_myHandle(object sender, MyEventAgrs args)
{
if (args != null)
{
uc2.InitValue(args.MyMsg);
}
else
uc2.UC1Msg = string.Empty;
}

這樣就完成了整個過程。Default.aspx頁面僅僅是一個載體或者是中間介質,所有的操作都是在兩個UserControl之間進行。但是當頁面第一次載入的時候,也就是頁面載入好過分下拉框沒有被點擊之前,這裡是沒有值傳遞的。

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.