将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
}