同じページに2つのユーザーコントロールがあります。 1つはナビゲーションリンクを表示するListViewを含み、ユーザーがListViewのボタンリンクをクリックすると2番目のユーザーコントロールを更新する必要があります。これどうやってするの?リンクボタンを渡す1つのユーザーコントロールから別のユーザーコントロールに移動
答えて
- ユーザーコントロールAがユーザーコントロールで宣言され、ボタンクリックして、raise a custom event
- を処理するページには、このイベントを処理し、それはあなたが必要な渡すことができ
コンテンツです更新ユーザーコントロールBのパブリックメソッドを呼び出します情報をUserControl AからEventArgs経由でページに渡します(または、UserControl自体を引数として渡してパブリックプロパティを使用します)。
ページは、メソッドパラメータを介してUserControl Bに引数を渡します。または、Update
メソッドを呼び出す前に、パブリックプロパティを変更します。ここで
- http://msdn.microsoft.com/en-us/library/fb3w5b53.aspx
- http://chiragrdarji.blogspot.com/2007/08/raise-event-from-user-control-to-main.html
あなたが要求してきたサンプルコードです。 無意味な名前を付けて申し訳ありませんが、あなたはこれについて何も言いませんでした。代わりに、読み込み可能な変数、プロパティ、メソッド、およびイベント名を使用する必要があります。それは問題ではありませんので、
分離コードから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(上記を参照)
- 1. あるユーザーコントロールから別のユーザーコントロールに情報を渡す
- 2. ユーザーコントロールを別のユーザーコントロール内に移動する
- 3. 1つのユーザーコントロールからドラッグして、Windows Phone 7の別のユーザーコントロールにドロップする
- 4. 1つのflowlayoutpanelから別のものへユーザーコントロールをドラッグ
- 5. Silverlightのユーザーコントロールのビューモデルクラスから別のユーザーコントロールを開く方法は?
- 6. 別のコントロールからユーザーコントロールにアクセスする
- 7. .ASPXのマークアップでユーザーコントロールを移動する
- 8. 1つのユーザーコントロールから他のユーザーコントロールに制御値を変更する方法はありますか?
- 9. コントローラからユーザーコントロールのプロパティをMVC3のビューに渡す
- 10. MVVMのユーザーコントロールにデータを渡すパターン
- 11. ユーザーコントロールの値をメインページに渡すaspx
- 12. Webユーザーコントロールを別のWebユーザーコントロールに挿入することはできますか?
- 13. ソースコントロールを1つのTFSプロジェクトから別のプロジェクトに移動
- 14. タブの順序を1つのユーザーコントロールに限定する
- 15. ユーザーコントロールから戻る
- 16. WPFでユーザーコントロールにDataContextを渡す
- 17. c#フォームプロジェクト:ユーザーコントロールに情報を渡す
- 18. C#、ユーザーコントロール、イベント - ユーザーコントロールのコントロールイベントオーバーライド?
- 19. 参照ユーザーコントロールからのメインコントロール
- 20. wpf c#ユーザーコントロールを別のスレッドにロード
- 21. フォームにいくつかのユーザーコントロールを介してボタンイベントを渡し、別のユーザーコントロールにクリックされたボタンが表示されるようにします。
- 22. ASP.NET Webユーザーコントロール - データベースに渡すパラメータ
- 23. カスタムユーザーコントロールベースクラスからユーザーコントロールを派生
- 24. コントロールフォルダからユーザーコントロールを取得
- 25. 動的なTreeViewユーザーコントロール
- 26. ユーザーコントロールから単一の値をCシャープのContaining Pageのコードに渡す
- 27. androidの1つのポイントから別のポイントにビットマップを移動する方法
- 28. C# - 動的にロードするユーザーコントロールのボタンクリック
- 29. 1つのViewControllerから別のViewControllerにオブジェクトを渡すには
- 30. 1つのページから別のページにパラメータを渡すには
私は実際にこれをしようとしているいくつかのサンプルコードを提供することは可能ですか?ありがとう。 – Aaron
@Aaron:サンプルが追加されました: –
ありがとうございます@tim。大変感謝しています。 – Aaron