关于c#:ASP.NET MVC从控制器传递多个数据实例到视图

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

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