我是ASP.Net MVC的新手。我创建了一个填充List<>的模型使用多个名为“Result”的自定义对象。然后,在我的控制器中,我获取此List并将其放入ViewData。
关于如何在我的视图(aspx页面)中使用此List,我感到有些失落。我的第一次尝试只是将ViewData [“Results”]放在< %%>之间,但显然这不起作用,我怀疑我需要以某种方式投射它并且还引用我对Result自定义对象的原始定义。然而,aspx页面似乎并没有为这种类型的编码设置......并且没有代码隐藏,我听说我应该保持视图“哑”。我见过的大多数例子似乎都不包括传递自定义对象,简单字符串等的场景。
只需使用< %%>即可优雅地完成此操作句法?我是否需要创建一个代码隐藏页面并在那里处理它?如果是这样,将如何创建一个,因为默认情况下不提供它们。
答案 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>