0

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

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

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

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

4

2 に答える 2

1

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

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

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

'ステップ 1 とステップ 2 のソースコード
Public Delegate Sub UpdatePageHeaderHandler(ByVal PageHeading As String)
パブリック クラス CommonUserControl
    System.Web.UI.UserControl を継承

    Public イベント UpdatePageHeaderEvent As UpdatePageHeaderHandler
    Public Sub UpdatePageHeader(ByVal PageHeadinga As String)
        RaiseEvent UpdatePageHeaderEvent(PageHeadinga)
    サブ終了
クラス終了

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

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

'ステップ 3 とステップ 4 のソースコード
部分クラス DerievedUserControl
    CommonUserControl を継承

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) は Me.Load を処理します
        MyBase.PageHeader("テスト ヘッダー")
    サブ終了
クラス終了

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

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

'ステップ 5 とステップ 6 のソースコード
Private Sub LoadDynamicControl()
    試す
        'コントロールのロードを試みる
        Dim c As CommonUserControl = CType(LoadControl("/Common/Controls/Test.ascx", CommonUserControl))
        'イベント ハンドラーを LoadedControl にアタッチします
        AddHandler c.UpdatePageHeaderEvent、AddressOf PageHeaders
        DynamicControlPlaceHolder.Controls.Add(c)
    ex を例外としてキャッチ
        'ログエラー
    エンドトライ
サブ終了
于 2008-09-25T04:30:50.533 に答える
0

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

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

于 2008-09-24T23:46:04.650 に答える