Какова наилучшая практика для вывода данных из коллекции на странице ASP.net? - PullRequest
3 голосов
/ 20 апреля 2010

Я портировал страницу с классического ASP на ASP.net. Часть того, что происходит на этой странице, состоит в том, что коллекция пользовательских типов генерируется и затем отображается с помощью команд Response.Write(). Я хотел бы разделить бизнес-логику на файл, стоящий за кодом (и, возможно, перенести все это в пользовательский элемент управления), но я не могу понять, как бы я на самом деле отображал коллекцию после ее создания. Я тоже хочу указать главную страницу, чтобы код не оставался встроенным. Вот очень урезанная версия текущего кода:

<%
Dim objs as ArrayList = New ArrayList()

For i = 0 To 2
    Dim obj as Obj = New Obj()

obj.setProp1("ASDF")
obj.setProp2("FDSA")

objs.Add(obj)
Next i
%>

<table>
<thead>
    <tr>
        <th scope="col">Property 1</th>
        <th scope="col">Property 2</th>
    </tr>
</thead>
<tbody>
<%
For Each obj As Obj In objs
Dim objProp1 As String = obj.getProp1
Dim objProp2 As String = obj.getProp2
%>                  
    <tr>
        <td><% Response.Write(objProp1)%></td>
        <td><% Response.Write(objProp2)%></td>
    </tr>
<%
Next
%>
</tbody>
</table>

Что такое ".net" способ сделать это?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2010

Вы также можете взглянуть на элемент управления ListView , который является более новой версией ретранслятора, упомянутого Джо Р. В блоге ScottGu .

есть отличное руководство о том, что вы можете сделать с помощью ListView.

Ваш код в основном превратится во что-то вроде этого:

<asp:ListView id="ListView1" runat="server" enableviewstate="false">
    <LayouTemplate>
        <table>
            <thead>
                <tr>
                    <th scope="col">Property 1</th>
                    <th scope="col">Property 2</th>
                 </tr>
             </thead>
             <tbody>
                 <asp:Placeholder runat="server" id="ItemPlaceholder" />
             </tbody>
        </table>
    </LayouTemplate>
    <ItemTemplate>
        <tr>
            <td><%# Eval("objProp1" )%></td>
            <td><%# Eval("objProp2" )%></td>
        </tr>
    </ItemTemplate>
</asp:ListView>

Эти ребята считают, что использование Eval не является хорошей практикой, но это облегчило написание примера. Если вы представляете данные только для чтения, не забудьте отключить ViewState, иначе ваши страницы станут очень большими.

РЕДАКТИРОВАТЬ Также найдена таблица сравнения функций между различными элементами управления стиля списка здесь.

2 голосов
/ 21 апреля 2010

В .NET2 ваш лучший выбор это ретранслятор. Примерно так:

<asp:Repeater id="rpt1" runat="server" EnableViewState="false"> 
    <HeaderTemplate> 
        <table> 
            <thead> 
                <tr> 
                    <th scope="col">Property 1</th> 
                    <th scope="col">Property 2</th> 
                 </tr> 
             </thead> 
             <tbody> 
    </HeaderTemplate>
    <ItemTemplate>
                 <tr> 
                     <td><%# Eval("objProp1" )%></td> 
                     <td><%# Eval("objProp2" )%></td> 
                 </tr>
    </ItemTemplate>
    <FooterTemplate>
             </tbody> 
        </table> 
    </FooterTemplate>
</asp:Repeater> 

и в своем коде вы привязываете данные следующим образом:

rpt1.DataSource = objs;
rpt1.DataBind();

Это было бы c #, хотя - надеюсь, что все в порядке

0 голосов
/ 20 апреля 2010

Я бы использовал что-то вроде ретранслятора или сетки данных и связал бы его со списком <>, который вы можете создать на своем уровне бизнес-логики.

...