如何像在 MVC 中一样遍历 WebForms 中的数据
Posted
技术标签:
【中文标题】如何像在 MVC 中一样遍历 WebForms 中的数据【英文标题】:How to loop through data in WebForms like in MVC 【发布时间】:2013-01-21 20:54:53 【问题描述】:如何像在 ASP.NET MVC 中那样循环浏览 WebForms 中的数据?例如,在 MVC 中,这很简单:
<table>
@foreach (var myItem in g)
@<tr><td>@MyItem.title<td></tr>
</table>
后面的代码会是什么样子?
或者,我可以将 MVC 项目添加到 WebForms 应用程序,以便我可以使用 MVC 功能吗?
【问题讨论】:
【参考方案1】:您可以使用<% %>
和<%= %>
标签以类似的MVC 类型方式循环列表,而不是使用转发器。
<table>
<% foreach (var myItem in g) %>
<tr><td><%= myItem.title %></td></tr>
<% %>
</table>
只要您循环访问的属性可以从 aspx/ascx 页面访问(例如,声明为受保护或公共),您就可以循环访问它。后面的代码没有其他必要的代码了。
<% %>
将评估代码,<%= %>
将输出结果。
这是最基本的例子:
在您的代码后面的类级别声明此列表:
public List<string> Sites = new List<string> "***", "Super User", "Meta SO" ;
这只是一个简单的字符串列表,然后在你的 aspx 文件中
<% foreach (var site in Sites) %> <!-- loop through the list -->
<div>
<%= site %> <!-- write out the name of the site -->
</div>
<% %> <!--End the for loop -->
【讨论】:
布兰登,你能告诉我这样的代码吗?谢谢。 @user1477388,没有代码隐藏。只要前端可以访问您的列表属性(例如,在后面的代码中是公共的或受保护的),那么您就可以循环访问它。类似于在 MVC 中设置模型属性。 @user1477388 我知道这可以回答您正在寻找的内容,但这并不是您在网络表单中真正做到的方式。您将使用中继器或等效设备,并在代码隐藏中绑定数据。 @JoshNoe 它可以使格式化(使用备用项目、页眉、页脚等的模板选项)以及 OnItemDataBound 事件更容易进行更复杂的数据操作。话虽如此,我更喜欢这种方法(在适当的情况下),并尽可能避免使用 Web 表单(和相关控件)。 @Brandon:当我使用循环而不是中继器时,如何处理代码后面的数据源和数据绑定?一旦我删除了转发器并使用了 foreach 循环,我后面代码中的 repeaterid 用红色下划线表示The name xyz doesn't exits in current context.
【参考方案2】:
在WebForm中你可以使用Repeater控件:
<asp:Repeater id="cdcatalog" runat="server">
<ItemTemplate>
<td><%# Eval("title")%></td>
</ItemTemplate>
</asp:Repeater>
在后面的代码中:
cdcatalog.DataSource = yourData;
cdcatalog.DataBind();
【讨论】:
因为 .NET 4.5 Repeater 被键入,所以你不应该使用 Eval()。请改用 ItemType 属性。【参考方案3】:您可以将Repeater
与任何类型的有效DataSource
(SqlDataSource
、EntityDataSource
、ObjectDataSource
)对象一起使用:
-
定义数据源
在您的中继器中引用数据源
....
<asp:Repeater id="someRep" runat="server" DataSourceID="YourDataSource">
<ItemTemplate>
<tr>
<td><%# Eval("PropertyName") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
...
【讨论】:
以上是关于如何像在 MVC 中一样遍历 WebForms 中的数据的主要内容,如果未能解决你的问题,请参考以下文章
可以像在 Python 中一样在 MATLAB 中进行并行遍历吗?
ViewBag 未在混合 Webforms/MVC 项目中声明
SpriteKit:你如何突出场景的一部分,就像在教程中一样?