2013-02-06 6 views
36

Làm cách nào để lặp qua dữ liệu trong WebForms như tôi làm trong ASP.NET MVC? Ví dụ: trong MVC, điều này đơn giản như:Làm thế nào để lặp qua dữ liệu trong WebForms như trong MVC

<table> 
    @foreach (var myItem in g) 
    { 
     @<tr><td>@MyItem.title<td></tr> 
    } 
</table> 

Cách dễ nhất và đơn giản nhất để thực hiện điều này trong WebForms là gì? Mã phía sau trông như thế nào?

Hoặc, tôi có thể thêm dự án MVC vào ứng dụng biểu mẫu web để tôi có thể sử dụng chức năng MVC không?

Cảm ơn.

Trả lời

56

Thay vì sử dụng một repeater, bạn có thể chỉ lặp qua các danh sách trong một MVC tương tự nhập bằng cách sử dụng các thẻ <% %><%= %>.

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

Chừng nào thuộc tính bạn đang Looping qua là acessible từ trang aspx/ascx (ví dụ khai báo là bảo vệ hoặc của cộng đồng), bạn có thể vòng qua nó. Không có mã nào khác trong mã phía sau cần thiết.

<% %> sẽ đánh giá mã và <%= %> sẽ xuất kết quả.

Dưới đây là ví dụ cơ bản nhất:

Declare danh sách này ở cấp lớp học của bạn trong mã của bạn đằng sau:

public List<string> Sites = new List<string> { "StackOverflow", "Super User", "Meta SO" }; 

Đó chỉ là một danh sách đơn giản của chuỗi, như vậy thì trong file aspx của bạn

<% foreach (var site in Sites) { %> <!-- loop through the list --> 
    <div> 
    <%= site %> <!-- write out the name of the site --> 
    </div> 
<% } %> <!--End the for loop --> 
+0

Brandon, bạn có thể hiển thị cho tôi mã đằng sau cho một cái gì đó như thế này không? Cảm ơn. – user1477388

+0

@ user1477388, không có codebehind. Miễn là thuộc tính danh sách của bạn có thể truy cập được vào giao diện người dùng (ví dụ: công khai hoặc được bảo vệ trong mã phía sau), thì bạn có thể lặp lại nó. Tương tự như thiết lập một thuộc tính mô hình trong MVC. – Brandon

+0

@ user1477388, xem cập nhật. – Brandon

10

Trong WebForm bạn có thể sử dụng điều khiển Repeater:

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

Trong mã sau:

cdcatalog.DataSource = yourData; 
cdcatalog.DataBind(); 
+0

Xin cảm ơn, nhưng mã phía sau trông như thế nào đối với nội dung như thế này? – user1477388

+0

Tôi đã cập nhật câu trả lời của mình – phnkha

+3

Vì .NET 4.5 Repeater được nhập và bạn không nên sử dụng Eval(). Sử dụng thuộc tính ItemType thay thế. –

1

Bạn có thể sử dụng một Repeater với bất kỳ loại đối tượng hợp lệ DataSource (SqlDataSource, EntityDataSource, ObjectDataSource):

  1. Xác định nguồn dữ liệu
  2. Reference DataSource trong Reperater bạn

....

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

...