如何像在 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】:

您可以使用&lt;% %&gt;&lt;%= %&gt; 标签以类似的MVC 类型方式循环列表,而不是使用转发器。

<table>
  <% foreach (var myItem in g)  %>
    <tr><td><%= myItem.title %></td></tr>
  <%  %>
</table>

只要您循环访问的属性可以从 aspx/ascx 页面访问(例如,声明为受保护或公共),您就可以循环访问它。后面的代码没有其他必要的代码了。

&lt;% %&gt; 将评估代码,&lt;%= %&gt; 将输出结果。

这是最基本的例子:

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

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 与任何类型的有效DataSourceSqlDataSourceEntityDataSourceObjectDataSource)对象一起使用:

    定义数据源 在您的中继器中引用数据源

....

 <asp:Repeater id="someRep" runat="server" DataSourceID="YourDataSource">
       <ItemTemplate>
          <tr>
                <td><%# Eval("PropertyName") %></td> 
          </tr>
    </ItemTemplate>
    </asp:Repeater>

...

【讨论】:

以上是关于如何像在 MVC 中一样遍历 WebForms 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

将 ASP.Net MVC 与 WebForms 相结合

可以像在 Python 中一样在 MATLAB 中进行并行遍历吗?

ViewBag 未在混合 Webforms/MVC 项目中声明

SpriteKit:你如何突出场景的一部分,就像在教程中一样?

在 WebForms 页面中使用 Url.Content 会错误地解析波浪号

在 .NET Standard 程序集中从 .NET Core 和 .NET MVC/Webforms 访问连接字符串