私の他の質問に関連するようなものです-私はrunat="server"とWebControlsでHTMLControlsを使用したことがありますが、生成されるマークアップ(要素のIDなどを含む)を制御することを好みます。
たとえば、コレクションの内容を繰り返し処理し、データバインディングに頼ったり、応答を使用せずにテーブルまたはリストを生成したりするための提案は何ですか?コードビハインドからループで書き込みますか?クリーンで保守可能なコードを作成するためのさまざまなアプローチに興味があります。
私の他の質問に関連するようなものです-私はrunat="server"とWebControlsでHTMLControlsを使用したことがありますが、生成されるマークアップ(要素のIDなどを含む)を制御することを好みます。
たとえば、コレクションの内容を繰り返し処理し、データバインディングに頼ったり、応答を使用せずにテーブルまたはリストを生成したりするための提案は何ですか?コードビハインドからループで書き込みますか?クリーンで保守可能なコードを作成するためのさまざまなアプローチに興味があります。
aspx ページでコレクションを直接反復処理するのを止めるものは何もありません。
<ul>
<% foreach(Person person in this.People) {%>
<li><%=person.Firstname %> <%=person.Lastname %></li>
<% } %>
</ul>
この例では、People はコード ビハインドのリスト プロパティです。多くの ASP.NET MVC プロジェクトがこの方法を使用していることがわかります。
「データバインディング」とは、データベースの結果セットを.Bind()呼び出しを介してGridviewやRepeaterなどにバインドすること、または一般的にASP.NETサーバーコントロール(またはHTMLサーバーコントロール)を使用することを意味しますか?
なぜなら、一般的にサーバーコントロールの使用を避けたいが、Response.Writeも使用したくない場合は、オプションが大幅に制限されているからです。
個人的には、マークアップを制御したい場合は、SqlDataReaderなどをループして、該当する場合はHTMLを使用して結果をリテラルコントロールに保存してみませんか。次に、ページ内(データを表示する場所)で次の操作を行います。
<asp:Literal ID="ltrResults" runat="server" />
@Brownie ...ええ、でもそれらはResponse.Writeステートメントです...省略形を使用しているだけです
最初の提案に触発されて、私は PlaceHolder を aspx に追加してから、コード ビハインドからプログラムで子コントロールを追加しようとしました。繰り返しコンテンツ用のユーザー コントロールを作成し、それをループ内の PlaceHolder に追加できることを願っています。これにより、UI コードを適切にカプセル化でき、すべての StringBuilder アクションを非表示にする必要があります。
リピーターコントロールは、まさにあなたが望むものに使用されます。これはサーバー コントロールですが、テンプレートで生成される HTML を指定します。データバインドを行いますが、それは手動ループの単なるショートカットではありませんか?