2010-06-02 59 views
2

我有一個是通過我的倉庫將數據庫抓住一些調度信息產生了一些可視數據。當信息存儲在Viewdata中時,我注意到viewdata被枚舉。我如何訪問枚舉項並根據viewdata生成表/列表?大部分信息只需要被吐出到一個表,但一個項目將有它產生的鏈接。ASP MVC訪問ViewData數組?

謝謝!

回答

6

當你說查看的數據被列舉爲時,我不知道你的意思。 ViewData包含放置在控制器操作中的對象的實例。如果你把一個IEnumerable<T>的實例,你可以一一列舉。因此,讓我們假設你保存你的ViewData內的IEnumerable<ProductViewData>從控制器的行動,筆下的觀點:

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傭工MVCContribGrid獲得更有前途:

<%= Html.Grid<ProductViewData>(Model) 
    .Columns(column => { 
     column.For(model => model.Id); 
     column.For(model => model.Description); 
    }) 
%> 
+0

一個強類型的視圖肯定聽起來更好。但我不知道如何顯示我的模型中的數據列表,只有在某個日期之後。 – 2010-06-02 19:24:10

+1

使控制器或模型做視圖模型的濾波。 – 2010-06-02 19:28:20