【问题标题】:ASP.NET MVC passing several data instances from controller to viewASP.NET MVC 将多个数据实例从控制器传递到视图
【发布时间】:2011-11-24 06:13:17
【问题描述】:

我正在尝试构建一个 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();
    }

我无法找出如何在视图中对其进行迭代。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢!但我究竟如何在控制器中“填充此视图模型”?
    • 好的,我设法填充了视图模型。但是,然后我尝试在视图中访问它,但是当我编写“模型”时,智能感知不允许我选择“文章”或“文章集”。我是否在视图或其他地方缺少#include 或“使用”或 ?
    【解决方案2】:

    在你看来你应该能够做到

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

    另一种方法是创建一个新的视图模型类来保存文章和列表:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-10
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多