从ASP.net页面上收集数据的最佳做法是什么?
我已经从传统的ASP移植到ASP.net的页面。本页面发生的一部分是生成一组自定义类型,然后通过Response.Write()
命令显示。我想将业务逻辑分离出来,放到代码背后(也许把这一切都转移到用户控件中),但我似乎无法弄清楚如何在生成集合后真正显示集合。我也想在这里指定一个母版页,所以代码不能保持内联。这是当前代码的一个非常简洁的版本:从ASP.net页面上收集数据的最佳做法是什么?
<%
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”这样做的方式?
您还可以查看ListView控制,这是Joe R提到的转发器的更新版本。关于ScottGu's blog上的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>
These guys考虑使用Eval
到不是一个很好的做法,但它使编写的例子更容易。如果您要展示只读数据,请不要忘记关闭ViewState,否则您的页面会变得非常快。
EDIT此处还发现了不同列表样式控件之间的feature comparison chart。
这些都在LayoutTemplate中。这没有重复的项目。你缺少ItemTemplate和需要进入LayoutTemplate的itemPlaceholder(在.NET3.5 - .NET4中你不需要;))除此之外,你是对的 - 任何一天在Repeater上的ListView。 – BritishDeveloper 2010-04-20 20:34:59
@BritishDeveloper:你是对的,我的坏。固定。 – R0MANARMY 2010-04-20 20:45:52
downvote被撤销:) – BritishDeveloper 2010-04-20 21:05:39
我会使用类似中继器或数据网格的东西,并将其绑定到您可以在业务逻辑层创建的列表<>。
在.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#,但 - 希望这没关系
你使用的是什么版本的.NET是? – 2010-04-20 19:25:26
我目前正在使用v2.0 – bshacklett 2010-04-20 19:58:26
不幸的是,你不能使用ListView然后... – 2010-04-20 21:58:09