0

現在、リクエスタのログイン状態に応じてさまざまなレベルの情報を示すテーブルを含むページがあります。これは、データ ソースからプルするリピーターを含むテーブルとして設定されます。

異なる点の例:

  • 生年月日列には、特定の役割を持つユーザーの正確な生年月日と、他のユーザーの生年月日が表示されます。
  • 姓は、特定の役割を持つ人にとってはハイパーリンクであり、それ以外の人にとっては通常のリテラルです。
  • 表には、特定の役割を持つ人のための追加の列もあります。

現在、基本的に、loginview コントロール内で微調整を加えてページ全体を複製しています。これはビジネスを行う上ではお粗末な方法のように思えますが、Web フォームを使ったよりクリーンな方法についてはよくわかりません。MVC と Razor (私はあまり経験がありません) を使用すると、ビューでいくつかの条件を使用して出力を微調整するのはかなり簡単に思えますが、Web フォームでは直感的ではないようです。

Webフォームでこれを行うより良い方法はありますか?

4

1 に答える 1

0

リピーターを使用して同様の実装を行い、次のアプローチで成功しました。

デコレーター パターンを使用して、リピーターにバインドするオブジェクトに「表示ディレクティブ」を追加します。あなたの例では、ShowFullDob、ShowLastNameAsLink、および ShowColumnX (オプションの列) の bool フラグを追加する場合があります。

表示するデータを取得するときは、モデル オブジェクトを新しい装飾されたモデル オブジェクトに変換し、現在の要求に応じて bool フラグを設定します。

これは少し直感に反する部分です: リピーターの ItemTemplate で、すべてのデータをレンダリングしますが、bool フラグを使用して Visible 属性を設定します (以下のコード サンプルを参照)。

<ItemTemplate>
    <td runat="server" Visible='<%# (bool)DataBinder.Eval(Container.DataItem, "ShowFullDob") %>'>construct full DOB here</td>
    <td runat="server" Visible='<%# !((bool)DataBinder.Eval(Container.DataItem, "ShowFullDob")) %>'>construct just the birth month/year here</td>
</ItemTemplate>

おそらく、他の SO'ers がリピーター内に条件付き要素を実装するより洗練された方法を提案できるかもしれません。ただし、少し醜くて手荒ですが、仕事は完了します。

于 2011-12-16T22:58:16.960 に答える