10

DataList は<table>or<span>タグでレンダリングされますが、これは望ましくありません。

設定しましRepeatLayout="Flow"たが、それでもスパンが得られます。設定しましRepeaterDirection="Horizontal"たが、それでもテーブルが表示されます。

すべてのスパン\テーブルなしで単純なデータリストを取得するにはどうすればよいですか?

<asp:DataList ID="MyDataList" runat="server" RepeatLayout="Flow" RepeatDirection="Horizontal">
   <ItemTemplate>
     ....
   </ItemTemplate>
</asp:Datalist>

前もって感謝します!

4

5 に答える 5

13

DataListコントロールである必要はありますか?Repeaterを使用するか、オブジェクトをループして出力を手動でレンダリングするだけで、レンダリングされた HTML を完全に制御できます。

于 2010-12-04T16:41:58.080 に答える
6

DataList は追加の可能性を提供するため (UPDATE および DELETE コマンドを介してデータベースを更新する、asp:DataSource を直接操作するなど)、Repeater を使用できない場合があります。

したがって、まだ DataList を使用する必要があるが、html を避けたい場合は、私が行ったようにその上に少し jQuery を実行できます。

aspx コード:

<ul class="list">
    <asp:DataList ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" DataKeyField="photo_id" RepeatLayout="Flow" RepeatDirection="Horizontal">
        <ItemTemplate>
            <li class="item" id='<%# Eval("photo_id") %>'>
                Whatever else you need here.
            </li>
            </ItemTemplate>
        </asp:DataList>
    </ul>

これにより、次のような HTML が生成されます。

<span id="SomeId" style="">
   <span>
      <li class="item ui-droppable" id="31349">
        Whatever else you need here.
     </li>
   </span>
</span>

明らかに、必要のない 2 つの span タグがあります。それらを削除するには、ページに jQuery スクリプトを追加します。

<script type="text/javascript">
$(document).ready(function () {
    $('.item').unwrap(); $('.item').unwrap();
});
</script>

私の場合、私が制御する順序付けられていないリストを作成したかったのです。ただし、当然のことながら、DataList で HTML を変更し、jQuery (.item) で適切なアイテムをターゲットにすることで、他の方法でそれを行うことができます。

これが、DataList 機能が必要で、Repeater では実行できない他の誰かに役立つことを願っています。

于 2011-12-06T07:51:49.640 に答える
3

独自のマークアップを設定できるリピーターの方が使いやすいと思います。

基本的に、aspリピーターを作成し、データリストとほぼ同じ方法でデータをそれにバインドし、「itemtemplate」タグでマークアップを作成します。(これはメモリからの警告です-私はロービングラップトップを使用しているので、構文をチェックするためのVisual Studioを持っていません。)

<asp:Repeater runat="server" id="MyRepeater">
    <HeaderTemplate><h1>My Data Title</h1></HeaderTemplate>
    <ItemTemplate>
        <p>Any Markup you want. This bit gets repeated</p>
        <%#Container.DataItem("DataKeyOrColumnName")%>
    </ItemTemplate>
    <FooterTemplate><p>The footter (and header) only appear once.</p><p>you could use them to start and end a list or table</p></FooterTemplate>
</asp:Repeater>

テンプレートに入れたマークアップのみを取得し、それ以外は取得しません。ヘッダーとフッターが必要ない場合はスキップできます。また、マークアップをまったく必要とせず、テンプレートにタグを含めない場合、データはプレーンテキストとして出力されます。

于 2010-12-04T16:44:02.730 に答える
0

<Table>ヘッダーと</table>フッターのテンプレートで使用していたため、このエラーが発生していました。それを削除し、各テンプレートでテーブル全体を使用したため、不要なタグの取得が停止しました。

于 2013-08-31T05:09:04.463 に答える