我有一些viewdata是通过我的存储库到数据库来获取一些调度信息而生成的。当信息存储在Viewdata中时,我注意到了viewdata的枚举。如何访问枚举项并根据viewdata生成表/列表?大多数信息只需要吐出到表中,但是一个项目将为其生成一个链接。
谢谢!
答案 0 :(得分:7)
当你说 the viewdata被枚举时,我不知道你的意思。 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>
当您开始在MVCContrib中使用HTML帮助程序时,事情变得更有希望,例如Grid:
<%= Html.Grid<ProductViewData>(Model)
.Columns(column => {
column.For(model => model.Id);
column.For(model => model.Description);
})
%>