ASP.NET MVC将几个数据实例从控制器传递到视图

时间:2010-09-30 18:51:07

标签: c# asp.net asp.net-mvc-2 viewdata

我正在尝试构建一个ASP.NET MVC 2应用程序。我想将数据传递给控制器​​的视图。当它只是一个数据结构时,我能够传递它。在控制器中:

 private ArticlesDBEntities _db = new ArticlesDBEntities();

    public ActionResult Articles()
    {
        return View(_db.ArticleSet.ToList());
    }

在视图中,我像这样遍历列表:

<div id="demo1"> 
<% foreach (var item in Model) { %>
    <ul> 
        <li id="<%= Html.Encode(item.Id) %>"> 
            <a href="#"><%= Html.Encode(item.Title) %></a> 
            <ul> 
                <li id="phtml_2"> 
                    <a href="#">Child node 1</a> 
                </li> 
                <li id="phtml_3"> 
                    <a href="#">Child node 2</a> 
                </li> 
            </ul> 
        </li> 
    </ul> 
    <% } %>
</div> 

(子节点目前是出于测试原因,没有真正的角色)

但是,我现在想要处理用户尝试访问Home / Articles / Id时的场景,而不仅仅是传递文章列表(用于填充jsTree),还有文章本身,所以我可以展示它同样。但是,当我尝试创建一个像这样的ViewData对象时:

    public ActionResult Articles()
    {
        ViewData["articlesList"] = _db.ArticleSet.ToList();
        return View();
    }

我无法找到如何在视图中迭代它。

2 个答案:

答案 0 :(得分:1)

就传递多个数据项而言,你可以使用视图模型(首选方式)或viewdata来完成。如果你想通过View模型传递它,你可以做类似

的事情
public class ArticlVM
{
   public Article Myarticle{get;set;}
   public IEnumerable<ArticleSet> Artcileset{get; set;}
}

你可以填充这个视图模型并将其传递给视图

在视图中你可以像

一样访问它
<%=Model.Article.articlName%> 
<%=Model.Article.articlDescription%> 
<%foreach(var m in Model.Articleset){%>
   <label><%=m.Property1%></label>
<%}%>

迭代ViewData [“key”]你必须将它强制转换为相应的对象,如

<%=foreach(var m in (ArticleSet)ViewData["Articles"]){%>

<label><%=m.Property1%></label>
<%}%>

答案 1 :(得分:0)

在您的视图中,您应该可以

<% foreach(var item in ViewData["articlesList"]) %>

另一种方法是创建一个既包含文章又包含列表的新视图模型类:

class ArticleViewModel {
   public Article Article { get;set;}
   public IEnumerable<Article> Articles { get;set;}
}

并将其传递到您的视图中。然后,您可以通过Model属性访问它,您将获得强大的输入。