如何阅读List<>在ASP.Net MVC 2中通过ViewData传递给View

时间:2010-10-16 02:31:19

标签: asp.net-mvc viewdata

我是ASP.Net MVC的新手。我创建了一个填充List<>的模型使用多个名为“Result”的自定义对象。然后,在我的控制器中,我获取此List并将其放入ViewData。

关于如何在我的视图(aspx页面)中使用此List,我感到有些失落。我的第一次尝试只是将ViewData [“Results”]放在< %%>之间,但显然这不起作用,我怀疑我需要以某种方式投射它并且还引用我对Result自定义对象的原始定义。然而,aspx页面似乎并没有为这种类型的编码设置......并且没有代码隐藏,我听说我应该保持视图“哑”。我见过的大多数例子似乎都不包括传递自定义对象,简单字符串等的场景。

只需使用< %%>即可优雅地完成此操作句法?我是否需要创建一个代码隐藏页面并在那里处理它?如果是这样,将如何创建一个,因为默认情况下不提供它们。

1 个答案:

答案 0 :(得分:1)

要使视图与您从操作传递给它的对象无缝集成,您需要更改位于视图顶部的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>