ASP.NET MVC passing several data instances from controller to view
我正在尝试构建一个ASP.NET MVC 2应用程序。我想将数据从控制器传递到视图。当它只是单个数据结构时,我就可以通过它。在控制器中:
1 2 3 4 5 6 | private ArticlesDBEntities _db = new ArticlesDBEntities(); public ActionResult Articles() { return View(_db.ArticleSet.ToList()); } |
在视图中,我像这样遍历列表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <% foreach (var item in Model) { %> <ul> <li id="<%= Html.Encode(item.Id) %>"> <%= Html.Encode(item.Title) %> <ul> <li id="phtml_2"> Child node 1 </li> <li id="phtml_3"> Child node 2 </li> </ul> </li> </ul> <% } %> |
(子节点出于测试原因,暂时没有实际作用)
但是,我现在想处理一个场景,当用户尝试访问Home / Articles / Id时,不仅传递商品列表(用于填充jsTree),而且传递商品本身,所以我可以显示它也一样但是,当我尝试像这样创建ViewData对象时:
1 2 3 4 5 | public ActionResult Articles() { ViewData["articlesList"] = _db.ArticleSet.ToList(); return View(); } |
我无法在视图中找到如何对其进行迭代。
就传递多个数据项而言,
您可以使用视图模型(首选方式)或通过viewdata进行。如果您想通过视图模型传递它,您可以执行类似
的操作
1 2 3 4 5 | public class ArticlVM { public Article Myarticle{get;set;} public IEnumerable<ArticleSet> Artcileset{get; set;} } |
u可以填充此视图模型并将其传递给视图
在视图中,您可以像
一样访问它
1 2 3 4 5 | <%=Model.Article.articlName%> <%=Model.Article.articlDescription%> <%foreach(var m in Model.Articleset){%> <label><%=m.Property1%></label> <%}%> |
遍历ViewData [" key "]您必须将其强制转换为相应的对象,例如
1 2 3 4 | <%=foreach(var m in (ArticleSet)ViewData["Articles"]){%> <label><%=m.Property1%></label> <%}%> |
在您的视图中,您应该可以执行
1 | <% foreach(var item in ViewData["articlesList"]) %> |
另一种方法是创建一个新的视图模型类,该类将同时容纳文章和列表:
1 2 3 4 | class ArticleViewModel { public Article Article { get;set;} public IEnumerable<Article> Articles { get;set;} } |
并将其传递到您的视图中。然后,您可以通过