Я не знаю, действительно понимаю, что вы имеете в виду, когда говорите, что данные представления перечислены . ViewData содержит экземпляры объектов, которые вы помещаете в действие вашего контроллера. Если вы поместите экземпляр IEnumerable<T>
, вы можете перечислить. Итак, давайте предположим, что вы сохраняете IEnumerable<ProductViewData>
внутри вашего ViewData из действия контроллера, которое отображает представление:
public ActionResult Index()
{
ViewData["products"] = new[]
{
new ProductViewData { Id = 1, Description = "product 1" },
new ProductViewData { Id = 2, Description = "product 2" },
new ProductViewData { Id = 3, Description = "product 3" },
}
return View();
}
Внутри представления вы можете перечислить и сгенерировать таблицу:
<table>
<% foreach (ProductViewData product in (IEnumerable<ProductViewData>)ViewData["products"]) { %>
<tr>
<td><%= product.Id %></td>
<td><%= Html.Encode(product.Description) %></td>
</tr>
<% } %>
</table>
При этом, я бы порекомендовал вам никогда не делать этого и всегда использовать строго типизированные представления. Использование ViewData
требует от вас наложения и использования магических строк внутри ваших представлений, что ИМХО плохо.
Вот то же самое, используя строго типизированное представление:
public ActionResult Index()
{
return View(new[]
{
new ProductViewData { Id = 1, Description = "product 1" },
new ProductViewData { Id = 2, Description = "product 2" },
new ProductViewData { Id = 3, Description = "product 3" },
});
}
и вид:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SomeNamespace.ProductViewData>" %>
<table>
<% foreach (var product in Model) { %>
<tr>
<td><%= product.Id %></td>
<td><%= Html.Encode(product.Description) %></td>
</tr>
<% } %>
</table>
и все становится еще более многообещающим, когда вы начинаете использовать HTML-помощники в MVCContrib , таких как Grid :
<%= Html.Grid<ProductViewData>(Model)
.Columns(column => {
column.For(model => model.Id);
column.For(model => model.Description);
})
%>