2

リポジトリを介してデータベースにアクセスし、スケジュール情報を取得することによって生成されるビューデータがいくつかあります。情報が Viewdata に格納されると、viewdata が列挙されていることに気付きました。列挙されたアイテムにアクセスし、ビューデータに基づいてテーブル/リストを生成するにはどうすればよいですか? ほとんどの情報は表に吐き出すだけで済みますが、1 つの項目にはそれに対するリンクが生成されます。

ありがとう!

4

1 に答える 1

7

ビューデータが列挙されていると言うとき、あなたが何を意味するのか本当に理解していません。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>

GridなどのMVCContribで HTML ヘルパーを使い始めると、さらに有望になります。

<%= Html.Grid<ProductViewData>(Model)
    .Columns(column => {
        column.For(model => model.Id);
        column.For(model => model.Description);
    })
%>
于 2010-06-02T19:16:49.623 に答える