【问题标题】:How to read List<> passed to View via ViewData in ASP.Net MVC 2如何在 ASP.Net MVC 2 中读取通过 ViewData 传递给 View 的 List<>
【发布时间】:2010-10-16 15:08:19
【问题描述】:

我对 ASP.Net MVC 还是很陌生。我创建了一个模型,它用多个名为“Result”的自定义对象填充 List。然后,在我的控制器中,我得到这个 List 并将其放入 ViewData。

对于如何在我的视图中使用此列表(aspx 页面),我有点不知所措。我的第一次尝试只是将 ViewData["Results"] 放在 之间,但显然这不起作用,我怀疑我需要以某种方式强制转换它并引用我对 Result 自定义对象的原始定义。然而,aspx 页面似乎并没有真正为这种类型的编码设置......并且没有代码隐藏,我听说我应该保持视图“哑”。我见过的大多数示例似乎都没有涵盖传递自定义对象的场景,只是简单的字符串等。

这可以仅使用 语法优雅地完成吗?我需要创建一个代码隐藏页面并在那里处理吗?如果是这样,如何创建一个,因为默认情况下不提供。

【问题讨论】:

  • 您使用的是 ASP.NET MVC 的哪个版本 1.0 或 2.0?
  • 你想要实现什么,这似乎更像是你模型的一部分
  • 我得到模型中的数据。我将数据传递给控制器​​,然后传递给视图。在视图中我需要使用数据。数据在自定义对象 Result 的 List 中传递,它很好地保存了它。
  • 我在 VS2010 上使用 ASP.Net MVC 2。

标签: asp.net-mvc viewdata


【解决方案1】:

要使视图与您从操作传递给它的对象无缝集成,您需要更改位于视图顶部的@Page directive 中的Inherits= 属性。

确保通过以下方式将此对象从操作传递到视图:

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 你的ModelList&lt;MyNameSpace.Models.Result&gt; 类型。

现在,在视图中,Model 对象将自动转换为 List&lt;MyNameSpace.Models.Result&gt; 类型,因此您可以无缝而干净地执行以下操作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多