0

マスターページ

  <div id="header" style="height: 150px; width: 750px;">
        <asp:Label ID="Label3" runat="server" Text="LoggedInUser:"></asp:Label>
        <asp:Label ID="lblLoggedInUser" runat="server" Text=""></asp:Label>
    </div>
    <div id="leftMenu" class="leftmenu">
          <br />
        <asp:DropDownList ID="ddlFamilyMembers" runat="server" 
              style="height: 25px; width: 125px" DataTextField="FullName" 
              DataValueField="MembershipGen" 
              onselectedindexchanged="ddlFamilyMembers_SelectedIndexChanged" 
              AutoPostBack="True" >
        </asp:DropDownList>
          <br /><br />
          <asp:Image ID="imageMember" class="space" runat="server" Height="150px" Width="125px" />
          <br /><br /><br />
        <asp:Label ID="Label1" runat="server" class="space" Text="MembershipID:"></asp:Label>
        <asp:Label ID="lblMembershipID" runat="server" Text=""></asp:Label>

        <br />
        <asp:Label ID="Label2" runat="server" class="space"  Text="Name:"></asp:Label>
        <asp:Label ID="lblMemberName" runat="server" Text=""></asp:Label>

        <br /><br /><br />
          <asp:LinkButton ID="lbInformation" class="space" runat="server" onclick="lbInformation_Click">Member Information</asp:LinkButton><br />
          <asp:LinkButton ID="lbAddress" class="space" runat="server" 
              onclick="lbAddress_Click">Member Address</asp:LinkButton>
    </div>

<div id="divRight" class="divright">
        <asp:ContentPlaceHolder ID="CPHMain" runat="server">
        </asp:ContentPlaceHolder>
        </div>

私の問題をよりよく理解できるように、マスターページのコードを投稿しました。これらのコントロールはマスター ページにあるため、マスター ページ内のすべてのコントロールのパブリック プロパティを作成して、コンテンツ ページをデータバインドする必要がありました。多分私はこれに間違って近づいていますが、これは私がこれを達成することを計画していた方法です.

ContentPage Default.aspxpage_loadイベントは、私のメソッドを呼び出してデータを取得し、ドロップダウン リスト、画像、2 つのラベル フィールドを設定します。ドロップダウンリストの選択されたインデックスの変更では、別のメソッドから新しい値を取得し、それに応じてそれらのコントロールに入力します。

私のマスターページでこれらのコントロールにアクセスするには、いくつかの異なる方法でアクセスしてから<%@MasterType VirtualPath="~/Member.Master" %>、厳密に型指定された接続を作成できます。または、緩やかなタイプの接続を作成することもできます。

これらの方法に関する私の問題は、15 を超えるコンテンツ ページがあり、コンテンツ ページの 1 つが呼び出されるたびに DropDownList を再バインドする必要があることを嫌うからです。また、コンテンツページのすべてのメソッドでコントロールを再インスタンス化する必要がありますが、これは間違っていると思います。

あまり繰り返しのコードを使わずにこれを達成するための適切な方法について、誰かがアドバイスをくれますか?

4

1 に答える 1

0

親を子から切り離そうとするのは正しい考えですが、あなたがやりたい方法は不格好かもしれません。

あなたがこれを行うことができると仮定すると、私は次のようにします:

  • BindFamilyMembers(string parameter)マスター ページのコード ビハインドでパブリック メソッドを作成します。

  • 子ページから、必要な一意のパラメーターをこのBindFamilyMembersMaster メソッドに渡します。

この方法では、コントロール自体を公開する必要はありません。パラメーターに基づいてこれらのコントロールを変更するメソッドを公開します。

編集

DDL SelectedIndex が変更されたことを子ページに通知します。これは、カスタム イベントに最適なケースです。

子ページがリッスンするマスター ページでイベントを構成できます。DDL.SelectedIndex が変更されると、カスタム イベントを介してカスタム イベントを発生させる (そして選択した情報を渡す) ことができ、リッスンしている子ページはそのイベントを処理できます。

オンラインのカスタム イベントの例はたくさんあります。ここから始めることができます: http://www.marten-online.com/csharp/simple-custom-event-handling.html

于 2013-07-31T17:34:02.987 に答える