Web フォームのシナリオで、関連するコントロールとコンテンツのブロックを囲み、分離するために、一般的にどのサーバー コントロールを使用するのか疑問に思っています。多くの場合、コード ビハインドの UI ロジックに基づいて表示または非表示にできる「パネル」で、HTML および関連するサーバー コントロールのブロックを囲む必要があります。私は通常、パネルを使用することに直面していますが、たとえばテーブル内で複数の TR を囲む必要がある場合、これは機能しません。これは、パネルが Table タグ内で無効な div としてレンダリングされるためです。この状況では、通常、各 TR を runat サーバーに設定し、それぞれを個別に表示/非表示にしますが、もっと良い方法があるはずです。このシナリオで使用される PlaceHolder コントロールを見たことがありますが、誰かがこれを行っているかどうか、または他の提案があるかどうかを知りたいと思っていました。
4 に答える
すべてのシナリオに当てはまる答えは1つではないと思います。何百ものツールがないため、いつでもハンマーを使用できます。
パネルは、結果のdivが正常に機能する場合に最適です。PlaceHolderはWebControlではなくControlを継承するため、使用するオーバーヘッドが少ないという議論をすることができます。テーブルがあり、個々のテーブル行を非表示にする必要がある場合、trにidとrunat="server"を追加しても問題はありません。
または、エディターコントロールの大きなテーブルを作成する必要がある場合(これは、単一のテーブル行を非表示にする場合の90%に適合します)、マークアップの一部を自動化するコントロールも作成しました。 。このコントロールは、太字にするかどうかに関係なく、フィールドヘッダーテキストを自動化し(必須)、ロールオーバーツールチップ付きのヘルプバブルを追加します。手動で追加する必要があるのは、テキストボックスまたはその他のエディターコントロールだけです。プラスの副作用は、カスタムコントロールがVisibleを設定できるIDを提供することです。
PlaceHolder コントロールを使用しても、Visual Studio は有効な HTML がないと文句を言います。
歯を食いしばって、コード ビハインドのプロパティにアクセスするサーバー側のコード ブロックを介してそれを行うことができます。
<table>
<tr>
....
</tr>
<% if( ShowSecretRow ) { %>
<tr>
<td>shhh!</td>
</tr>
<% } %>
</table>
ただし注意してください...滑りやすい斜面であり、ASPX が複雑になりすぎないようにしてください。
おそらく文字通りのコントロールです。
任意の html 要素を使用できます。id と runat サーバーを指定するだけです。これにより、ある程度の柔軟性が得られます。