Как читать List <>, переданный View через ViewData в ASP.Net MVC 2 - PullRequest
2 голосов
/ 16 октября 2010

Я довольно новичок в ASP.Net MVC. Я создал модель, которая заполняет список <> несколькими пользовательскими объектами под названием «Результат». Затем в моем контроллере я получаю этот список и помещаю его в ViewData.

Я немного растерялся относительно того, как использовать этот Список на мой взгляд (страница aspx). Моей первой попыткой было просто поместить ViewData ["Results"] между <%%>, но, очевидно, это не работает, и я подозреваю, что мне нужно как-то привести его, а также сослаться на мое первоначальное определение пользовательского объекта Result. Тем не менее, страница aspx не кажется настроенной для этого типа кодирования ... и нет никакого кода позади, и я слышал, что я должен держать представление "тупым". Кажется, что большинство примеров, которые я видел, не охватывают этот сценарий передачи пользовательских объектов, просто простые строки и т. Д.

Можно ли сделать это элегантно, используя только синтаксис <%%>? Нужно ли создавать страницу с выделенным кодом и обрабатывать ее там? Если да, то как его можно создать, поскольку они не предоставлены по умолчанию.

1 Ответ

1 голос
/ 16 октября 2010

Чтобы представление полностью интегрировалось с объектом, который вы передаете ему из действия, вам нужно изменить атрибут Inherits= в @Page directive, расположенном в верхней части представления.

Обязательно передайте этот объект представлению из действия с помощью следующего:

public MyController : Controller 
{
     public ActionResult ShowResults()
     {
          List<Result> results = GenerateResults();
          return View(results); // this passes 'results' as the model of the view
     }
}

В этом случае у вас есть пользовательский объект с именем Result, который вы передаете в представление списка. Таким образом, в директиве @Page вы меняете Inherits= на

Inherits="System.Web.Mvc.ViewPage<List<MyNameSpace.Models.Result>>"

Итак, ваша полная директива @Page будет выглядеть примерно так:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<MyNameSpace.Models.Result>>" %>

То, что это делает, говорит View, что ваш Model имеет тип List<MyNameSpace.Models.Result>.

Теперь в представлении объект Model будет автоматически приведен к типу List<MyNameSpace.Models.Result>, поэтому вы можете легко и безошибочно выполнять следующие действия.

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<MyNameSpace.Models.Result>>" %>

<table>
   <tr>
      <th>Result PropertyOne</th>
      <th>Result PropertyTwo</th>
   </tr>

<% foreach(var result in Model){ %>

   <tr>
      <td><%: result.PropertyOne  %></td>
      <td><%: result.PropertyTwo  %></td>
   </tr>

<% } %>

</table>
...