Web ユーザー コントロールを使用してページ テキストを更新する

StackOverflow https://stackoverflow.com/questions/130561

  •  02-07-2019
  •  | 
  •  

質問

ページがクエリ文字列に基づいてユーザー コントロール (x.ascx) を動的に読み込むアプリケーションを構築しています。

ページに検証概要があり、ユーザー コントロールから更新したいと考えています。これにより、1 つの検証概要を使用して複数のコントロールを使用できるようになります。コントロールとページ間でデータを渡すにはどうすればよいですか。

デザイン時にコントロールを定義し、そのためにイベントを使用できることはわかっていますが、これらのコントロールは Page.LoadControl を使用して動的に読み込まれます。

また、セッションやクエリ文字列の使用は避けたいと考えています。

役に立ちましたか?

解決

これを行う方法を見つけました:

ステップ1:基本ユーザー コントロールを作成し、このコントロールでデリゲートとイベントを定義します。

ステップ2:基本ユーザー コントロールにパブリック関数を作成し、ステップ 1 で定義したイベントを発生させます。

'SourceCode for Step 1 and Step 2
Public Delegate Sub UpdatePageHeaderHandler(ByVal PageHeading As String)
Public Class CommonUserControl
    Inherits System.Web.UI.UserControl

    Public Event UpdatePageHeaderEvent As UpdatePageHeaderHandler
    Public Sub UpdatePageHeader(ByVal PageHeadinga As String)
        RaiseEvent UpdatePageHeaderEvent(PageHeadinga)
    End Sub
End Class

ステップ 3:手順 1 で作成した基本ユーザー コントロールから Web ユーザー コントロールを継承します。

ステップ 4:Web ユーザー コントロールから - ステップ 2 で定義した MyBase.FunctionName を呼び出します。

'SourceCode for Step 3 and Step 4
Partial Class DerievedUserControl
    Inherits CommonUserControl

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MyBase.PageHeader("Test Header")
    End Sub
End Class

ステップ5:ページで、Page.LoadControl を使用してコントロールを動的に読み込み、コントロールをベース ユーザー コントロールとしてキャストします。

ステップ6:このコントロールにイベント ハンドラーをアタッチします。

'SourceCode for Step 5 and Step 6
Private Sub LoadDynamicControl()
    Try
        'Try to load control
        Dim c As CommonUserControl = CType(LoadControl("/Common/Controls/Test.ascx", CommonUserControl))
        'Attach Event Handlers to the LoadedControl
        AddHandler c.UpdatePageHeaderEvent, AddressOf PageHeaders
        DynamicControlPlaceHolder.Controls.Add(c)
    Catch ex As Exception
        'Log Error
    End Try
End Sub

他のヒント

ASP のバリデーター コントロールについて話していると仮定すると、バリデーター コントロールを検証の概要と連携させるのは簡単です。同じ検証グループを使用します。通常、すべてのユーザー コントロールは、ValidationGroup プロパティを追加する基本クラスから派生します。このプロパティのセッターは、すべての内部バリデーターを同じ検証グループに変更するオーバーライドされたメソッドを呼び出します。

難しいのは、動的に追加されたときにそれらを動作させることです。主にページのサイクルと、ページ オブジェクトにページを追加するときに関して、注意すべき注意点がいくつかあります。設計時に使用する可能性のあるすべてのユーザー コントロールがわかっている場合は、たとえその数が多すぎる場合でも、EnableViewState と Visible を使用してそれらを静的に追加してオーバーヘッドを最小限に抑えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top