如何在MVC中循环遍历WebForms中的数据

use*_*388 46 asp.net asp.net-mvc webforms

如何像在ASP.NET MVC中那样遍历WebForms中的数据?例如,在MVC中,这很简单:

<table>
    @foreach (var myItem in g)
    { 
        @<tr><td>@MyItem.title<td></tr>
    }
</table>
Run Code Online (Sandbox Code Playgroud)

在WebForms中执行此操作最简单,最简单的方法是什么?背后的代码会是什么样的?

或者,我可以将MVC项目添加到webforms应用程序,以便我可以使用MVC功能吗?

谢谢.

Bra*_*don 74

您可以使用<% %><%= %>标签以类似的MVC类型方式循环遍历列表,而不是使用转发器.

<table>
  <% foreach (var myItem in g) { %>
    <tr><td><%= myItem.title %></td></tr>
  <% } %>
</table>
Run Code Online (Sandbox Code Playgroud)

只要您循环访问的属性可以从aspx/ascx页面访问(例如声明为protected或public),您就可以遍历它.代码中没有其他必要的代码.

<% %>将评估代码并<%= %>输出结果.

这是最基本的例子:

在代码后面的类级别声明此列表:

public List<string> Sites = new List<string> { "StackOverflow", "Super User", "Meta SO" };
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的字符串列表,所以在你的aspx文件中

<% foreach (var site in Sites) { %> <!-- loop through the list -->
  <div>
    <%= site %> <!-- write out the name of the site -->
  </div>
<% } %> <!--End the for loop -->
Run Code Online (Sandbox Code Playgroud)

  • @ user1477388我知道你会找到你想要的答案,但这并不是你在webforms中如何做到的.您将使用转发器或等效的,并绑定代码隐藏中的数据. (3认同)
  • @JoshNoe它可以使格式化更容易(使用Alternate项,Header,Footer等的Template选项)以及OnItemDataBound事件来进行更复杂的数据操作.话虽这么说,我更喜欢这种答案(在适当的时候)的方法,并尽可能地避开网络表单(和相关控件). (2认同)

phn*_*kha 11

在WebForm中,您可以使用Repeater控件:

<asp:Repeater id="cdcatalog" runat="server">
   <ItemTemplate>
       <td><%# Eval("title")%></td>
   </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

代码背后:

cdcatalog.DataSource = yourData;
cdcatalog.DataBind();
Run Code Online (Sandbox Code Playgroud)

  • 由于输入了.NET 4.5 Repeater,因此不应使用Eval().请改用ItemType属性. (3认同)