将Massive列表传递给MVC3中的View

ASP.NET MVC的新手(现在使用带Razor的MVC3),我很困惑将一个对象从Controller传递给View。 具体来说,我正在尝试使用MVC3和Rob Conery有趣的Massive(http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive)。 我正在搞一个博客作为一个简单的Web应用程序进行试验。

HomeController.cs:

public ActionResult Index() { var table = new DynamicModel("mydb", tableName: "Posts"); //grab all the posts var posts = table.All(); ViewData["Posts"] = posts; return View(); } 

这部分效果很好。 但是我该怎么做?

 return View(posts); 

如果我在视图中引用@posts.PostID ,则会出错并说它无效。 所以我尝试针对DynamicModel创建强类型视图,但posts仍然没有。

我知道我可以创建一个ViewModel并针对该类型键入视图并将数据插入其中。 这更多是关于理解Controller / View如何交互。

谢谢!

ASP NET MVC模板是解决方案。

首先,不鼓励使用ViewData ,特别是现在在MVC 2.0和3.0中,有很多更好的方法将状态传递给视图。

强类型视图是要走的路。 但是,如果你有一个集合通过怎么办? 好吧,您仍然可以为集合(或通用列表)创建强类型视图,但标准解决方案是使用ASP NET MVC模板(ascx文件)作为项而不是集合,并在父视图上调用RenderPartial:

例如:

  
<% for (int i = 0; i < Model.Bars.Count; i++) {%>

Bar <%: String.Format("{0:g}", Model.Bars[i].DocumentDate.ToShortDateString())%>

<%: Html.DisplayFor(m => m.Bars[i].Content)%>
<%}%>

这里有关于这个主题的非常好的系列。

首先,您需要创建一个类。 例如:

 public class Post : DynamicModel { public Post(): base("db") { PrimaryKeyField = "PostID"; } } 

在Controller中,您可以:

 public ActionResult Index() { var table = new Post(); var posts = table.All(); return View(posts); } 

因此,您可以创建一个强类型视图,并将视图模型设置为IEnumerable。 视图将如下所示:

 @model IEnumerable 

Index

    @foreach (var item in Model) {
  • @item.PostID
  • }