5

誰かが以下の要求を解決するための最善の訴因を推奨しようとすることができますか?

私は、Repeaterクラスをベースとして使用して多数の拡張クラスを作成しました。これを行うことの柔軟性、容易さ、および結果が気に入っています。私が今やりたいのは、単一のオブジェクトに対して同様のカスタムWebコントロールを作成することです(つまり、データソースがIListSourceまたはIEnumerableを実装していません)。リピーターを拡張し、オブジェクトを保持する1つのアイテムのリストを使用してデータソースを設定し、データバインディングを行うことで、達成しようとしている構造を作成しました。

e.g a rough example:

    Dim oObj as New MyObject(1)
    Dim gl As New Generic.List(of MyObiect)()
    gl.Add(oObj)
    rpt.DataSource = gl
    rpt.DataBind()

これは物事の周りの小さなハックのように見えます、私がしたいことは次のとおりです:

e.g new call, where my control is the new custom control:

    Dim oObj as New MyObject(1)
    myControl.DataSource = oObj 
    myControl.DataBind()

このカスタムコントロールをさまざまな変数とプロパティで定義できるようにしたいと思います。その結果、次のタイプのレイアウトが可能になります。

<My:ObjControl ID="frm" runat="server">
    <Tabs>
        <My:Tab name="Details">
            <Items>
                <My:Item Type="Text" Label="First Name" Property="FirstName" />
                <My:Item Type="Text" Label="Last Name" Property="LastName" />
                <My:Item Type="Text" Label="Title" Property="Title" />
            </Items>
        </Tab>
        <My:Tab name="Address">
            <Items>
                <My:Item Type="Text" Label="Address 1" Property="Address1" />
                <My:Item Type="Text" Label="Address 2" Property="Address2" />
                <My:Item Type="Text" Label="Address 3" Property="Address3" />
            </Items>
        </Tab>
    </Tabs>
</My:ObjControl>

この実装はWebFormsを使用して実行する必要がありますが、上記を考慮するとMVCを使用するのが理想的なアプローチのようです。これを行うことで、リフレクション(特定のインターフェイスを実装するすべてのクラスで使用できる)を使用する柔軟なWebControlを作成し、必要なたびに3行のコードの後ろ(上)で必要なフォームを生成します。

オブジェクトを取得してそれに応じてデータソースを設定し、時間を節約するカスタムリピーター(DataObject)にプロパティを追加する必要がありますか?それとももっと良い方法はありますか?

これがすべて理にかなっていることを願っています!

乾杯、スティーブ

4

1 に答える 1

5

あなたはリピーターがリストを望んでいて、それに1つのインスタンスを与えたいという事実を回避するために一生懸命に努力しています。新しいリスト*oObjでラップして、次に進みます。それはいつも行われています。

私は確かに彼らがそのカスタムサーバーコントロールで何をしているのかわからない。あなたはまた一生懸命頑張っているようです。

<asp:repeater id="whatever" runat=server>
   <ItemTemplate>First Name: <%# DataBinder.Eval(Container.DataItem,"FirstName") %></ItemTemplate>
</asp:repeater>
于 2009-05-03T12:20:26.227 に答える