ASP MVC Access ViewData Array? - PullRequest
       7

ASP MVC Access ViewData Array?

2 голосов
/ 02 июня 2010

У меня есть некоторые viewdata, которые генерируются, проходя через мой репозиторий в базу данных, чтобы получить некоторую информацию о расписании Когда информация сохраняется в Viewdata, я заметил, что viewdata перечисляется. Как я могу получить доступ к перечисленным элементам и сгенерировать таблицу / список на основе данных представления? Большую часть информации просто нужно выложить в таблицу, но для одного элемента будет сгенерирована ссылка.

Спасибо!

1 Ответ

7 голосов
/ 02 июня 2010

Я не знаю, действительно понимаю, что вы имеете в виду, когда говорите, что данные представления перечислены . 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>

и все становится еще более многообещающим, когда вы начинаете использовать HTML-помощники в MVCContrib , таких как Grid :

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