2012-01-18 21 views

答えて

6
  1. ユーザーコントロールAがユーザーコントロールで宣言され、ボタンクリックして、raise a custom event
  2. を処理するページには、このイベントを処理し、それはあなたが必要な渡すことができ

コンテンツです更新ユーザーコントロールBのパブリックメソッドを呼び出します情報をUserControl AからEventArgs経由でページに渡します(または、UserControl自体を引数として渡してパブリックプロパティを使用します)。

ページは、メソッドパラメータを介してUserControl Bに引数を渡します。または、Updateメソッドを呼び出す前に、パブリックプロパティを変更します。ここで


あなたが要求してきたサンプルコードです。 無意味な名前を付けて申し訳ありませんが、あなたはこれについて何も言いませんでした。代わりに、読み込み可能な変数、プロパティ、メソッド、およびイベント名を使用する必要があります。それは問題ではありませんので、

分離コードからListViewコントロールのデータバインディングを削除
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UsercontrolA.ascx.vb" Inherits="WebApplication1.UserControlA" %> 
<asp:ListView ID="ListView1" runat="server"> 
    <ItemTemplate> 
     <asp:LinkButton ID="LinkButton1" 
     CommandName="LinkClick" 
     CommandArgument='<%#Eval("ID") %>' 
     runat="server" 
     Text='<%#Eval("Text") %>'></asp:LinkButton> 
    </ItemTemplate> 
</asp:ListView> 

:リストビューでのUserControl Aを削減

。分離コードでUpdate方法 - で

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UserControlB.ascx.vb" Inherits="WebApplication1.UserControlB" %> 
<asp:Label ID="Label1" runat="server"></asp:Label> 

:ラベル(ASCX)よりも何も

Public Event LinkClicked(sender As UserControlA, id As Int32) 

Private Sub LV_ItemCommand(sender As Object, e As ListViewCommandEventArgs) Handles ListView1.ItemCommand 
    If e.CommandName = "LinkClick" Then 
     Dim id = CType(e.CommandArgument, Int32) 
     ' This is the best way for UC's to commmunicate with the page: ' 
     RaiseEvent LinkClicked(Me, id) 
    End If 
End Sub 

シンプルのUserControl B:重要な部分は、ListViewコントロールのItemCommandを処理し、カスタムイベントを上げています:

Public Sub Update(showID As Int32) 
    Me.Label1.Text = String.Format("Link {0} clicked", showID.ToString) 
End Sub 

は最後に、ここにページ(ASPX)があります

<uc1:UsercontrolA ID="UC_A" runat="server" /> 
<br /> 
<uc2:UserControlB ID="UC_B" runat="server" /> 

両方のUserControlを制御します。これは、ユーザーコントロールAからのイベントを処理し、ユーザーコントロールBが提供するUpdate方法 - を呼び出し:

Private Sub LinkClicked(sender As UserControlA, id As Integer) Handles UC_A.LinkClicked 
    Me.UC_B.Update(id) 
End Sub 

このイベント・アプローチの利点がユーザーコントロールが再利用可能であるとどまることです。このイベントを処理しない場合でも、他のページでUserControl Aを使用することができます。何が必要か、何をすべきかを決定するのはコントローラの一部です。

UserControlsは、特定のコントローラに依存しないようにする必要があります。そうでない場合は、ハードリンクされ、再利用できません。それはまた厄介なエロスのための良い源になるでしょう。UserControlは、他のネストされた(User-)コントロールのコントローラーですが、ページ自体はコントローラーではありません。

通信の概要

  • ページ - >ユーザーコントロール - >のパブリックプロパティとメソッド
  • ユーザーコントロール - >ページ - >イベント
  • ユーザーコントロール - >ユーザーコントロール - >コントローラ-ユーザーコントロールを採用page-role(上記を参照)
+0

私は実際にこれをしようとしているいくつかのサンプルコードを提供することは可能ですか?ありがとう。 – Aaron

+0

@Aaron:サンプルが追加されました: –

+0

ありがとうございます@tim。大変感謝しています。 – Aaron

関連する問題