オブジェクトに関する情報を表示するために複数のページで使用するユーザーコントロールがあります。このusercontrolを使用する必要があるときは、Display(usercontrol上)というメソッドを呼び出し、いくつかの値を渡します。foreachループ内のユーザーコントロールのプロパティを設定する
public void Display(string name, List<Items> items)
{
// Set a few protected properties so I can display values from the aspx page
}
これはうまくいきましたが、今はこのコントロールをaspxページのforeachループ内で使用する必要があります。
<% foreach (var c in Categories) { %>
<uc:ItemsControl runat="server"/>
<% } %>
categoriesオブジェクトには、それ以外の方法でDisplayメソッドに渡すメソッドとプロパティがあります。では、どうすれば値を適切に設定できますか?
私は、ユーザーコントロールのパブリックのプロパティを作り、ちょうどこの方法でそれらを設定してみました:
<uc:ItemsControl Items="<%# c.Items %>"
OtherProperty="<%# c.GetProperty() %>"
runat="server"/>
これは動作しません、で送信されたばかりのプロパティが空であるため。 <%=を使用しても動作しませんし、実際には 'c'を認識しないためエラーが発生します(runat = "server"を取り除かないと、少なくともコンパイルされますが、 。これを行うための適切な方法は何ですか
編集:?。また、Repeaterコントロールがデータバインディングのためにこれを簡単に作るかもしれないが、私は任意の.NETコントロールの使用を避けることを好むだろう
リピータはおそらく適切な方法ですが、可能な限り.NETコントロールの使用を避けようとしており、HTMLを生成することをお勧めします。 – Brandon
まあ、私も - 私はループとエミットのHTMLのアプローチをはるかに簡単に見つける。だから私はASP.NET MVCが好きです。しかし、Webフォームでは、独自のカスタムコントロールを使用しており、特にループ内でそのプロパティを設定する必要がある場合は、データバインディングを使用するのが最も簡単な方法です。好奇心のために、asp.netの組み込みコントロールを避けるのはなぜですか?これはパフォーマンスに関連する問題なのでしょうか?リピータのコントロールは非常に素早く素早く、そのようなビューステートや他のクルードを引き起こさない。リピータは、コントロールとして偽装するforeachループのように動作することができます。 –
これは、一貫性/パフォーマンス上の懸念が増しています。コントロール/ AjaxToolKitは必要なだけ重すぎて純粋なHTML/jQueryのアプローチがとられたので、私の上司は当初はプロジェクトの.NETコントロールを持たずにいました。他のすべてが失敗した場合、私は1つのリピータを投入することができました。すでに開始したパスを使用してこれを行う方法があるかどうか疑問に思っていました。 – Brandon