2010-06-02 10 views
2

J'ai des viewdata qui sont générées en passant par mon dépôt vers la base de données pour récupérer quelques informations de planification. Lorsque les informations sont stockées dans les données de visualisation, j'ai remarqué que les données de vue sont énumérées. Comment puis-je accéder aux éléments énumérés et générer une table/liste basée sur les données d'affichage? La plupart des informations doivent juste être crachées dans une table, mais un élément aura un lien généré pour cela.ASP MVC Access ViewData Array?

Merci!

Répondre

6

Je ne sais pas vraiment comprendre ce que vous voulez dire quand vous dites que le viewdata est énuméré. ViewData contient des instances d'objets que vous avez placées dans votre action de contrôleur. Si vous mettez une instance d'un IEnumerable<T>, vous pouvez l'énumérer. Alors supposons que vous stockez un IEnumerable<ProductViewData> dans vos ViewData de l'action du contrôleur qui est rendu la vue:

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(); 
} 

A l'intérieur de la vue, vous pouvez énumérer et générer une table:

<table> 
<% foreach (ProductViewData product in (IEnumerable<ProductViewData>)ViewData["products"]) { %> 
<tr> 
    <td><%= product.Id %></td> 
    <td><%= Html.Encode(product.Description) %></td> 
</tr> 
<% } %> 
</table> 

Cela dit vous, Je vous recommande de ne jamais le faire et toujours utiliser des vues fortement typées. Utiliser ViewData vous oblige à lancer et à utiliser des chaînes magiques à l'intérieur de vos vues, ce qui est mauvais à mon humble avis.

est ici même en utilisant une vue fortement typé:

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" }, 
    }); 
} 

et la vue:

<%@ 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> 

et les choses deviennent encore plus prometteur lorsque vous commencez à utiliser des aides HTML dans MVCContrib tels que le Grid:

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

Une vue fortement typée sonne nettement mieux. Mais je ne suis pas sûr comment afficher une liste de données de mon modèle qui est seulement après une certaine date. –

+1

Faites en sorte que le contrôleur ou le modèle effectue le filtrage du modèle de vue. –