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