ASP.NET MVC:如何将列表(从Model中的类)传递到View中的转发器?
我该怎么办? 我已经开始使用MVC了,我遇到了传递数据的问题。
我的具体问题是我在模型中拥有的对象列表,我需要在View中访问并迭代。
提前致谢。
让我们说你的控制器动作看起来像
public ActionResult List() { List myList = database.GetListOfStrings(); (...) }
现在您要将列表传递给视图,例如“List.aspx”。 您可以通过让操作返回ViewResult来实现此目的(ViewResult是ActionResult的子类)。 您可以使用Controller的View方法返回ViewResult,如下所示:
public ActionResult List() { List myList = database.GetListOfStrings(); (...) return View("List", myList); }
为了能够在视图中以强类型方式访问列表,它必须从ViewPage派生,其中T是您传入的数据的类型。因此,在当前情况下我们的视图(在List.aspx中。 cs)会是这样的:
public partial class List : ViewPage { (...) }
以这种方式传递到视图中的数据称为“ViewData”。 要访问数据,您必须浏览ViewPage上的ViewData.Model属性。 因此,要渲染列表的内容,您将编写(在List.aspx中)
<% foreach(var s in this.ViewData.Model){ %> - <%= s %>
<% } %>
这里,this.ViewData.Model具有您在ViewPage中指定类型参数T的类型,因此在我们的示例中this.ViewData.Model具有类型List。
您可以使用转发器来渲染这样的东西,但我不推荐它。 如果要使用类似的东西,请查看CodePlex上MvcContrib项目的Grid模块。
快速而肮脏的方式是通过ViewData传递它
public ActionResult List() { ViewData["MyList"] = new List () {"test1", "test2"}; return View (); }
然后你可以在你的视图中访问它
<% foreach (string item in (List)ViewData["MyList"]) { %> - <%= item %>
<% }%>
ASP.NET MVC有几种方法可以将数据传递给View。 将模型类传递给View的主要方法是将它包含在控制器返回的ViewResult类中,如下所示:
Function List() As ViewResult ' pass other information in the viewdata dictionary ViewData("Title") = "All Items" ' get our item list from the Model classes Dim items = Model.ItemRepository.GetAllItems() ' return as part of result Return View(items) End Function
然后,从您的视图中,您可以访问该列表,如下所示:
<% For Each item In ViewData.Model %> <%=item.Name%> <% End If %>
另一种传递数据的方法是通过ViewData字典,如上面的控制器函数所示。 您可以在视图中访问它,如:
<%=ViewData("Title")%>
希望有所帮助。
如果我没有弄错,转发器控件需要页面模型。 (页面模型是经典ASP.NET使用的)
但你应该看看这个链接: http : //haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx