2

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

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

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

4

1 回答 1

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

这样做是告诉ViewModel是 type 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>
于 2010-10-16T07:08:19.810 回答