2

我有一些通过我的存储库到数据库来获取一些调度信息而生成的视图数据。当信息存储在 Viewdata 中时,我注意到 viewdata 是枚举的。如何访问枚举项并根据视图数据生成表/列表?大多数信息只需要吐出到一个表中,但一个项目将有一个为其生成的链接。

谢谢!

4

1 回答 1

7

当您说viewdata is enumerated时,我真的不明白您的意思。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);
    })
%>
于 2010-06-02T19:16:49.623 回答