Search code examples
c#asp.netasp.net-mvc-2viewdata

ASP.NET MVC passing several data instances from controller to view


I'm trying to build an ASP.NET MVC 2 application. I want to pass data to a view from a controller. I am able to pass it when it is only a single data structure. In the controller:

 private ArticlesDBEntities _db = new ArticlesDBEntities();

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

and in the view, I iterated over the list like so:

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

(the child nodes are for testing reasons right now, don't have a real role)

However, I now want to handle a scenario when a user tries to access Home/Articles/Id, and not only pass the article list (used for populating a jsTree), but also the Article itself, so I can show it as well. However, when I tried creating a ViewData object like so:

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

I was unable to find out how to iterate over it in the view.


Solution

  • as far as passing multiple data items is concerned u can do it using view models (preferred way) or by viewdata. if u want to pass it through View model u can do something like

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

    u can populate this view model and pass it to view

    in view u can access it like

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

    to iterate over ViewData["key"] u have to cast it to corresponding object like

    <%=foreach(var m in (ArticleSet)ViewData["Articles"]){%>
    
    <label><%=m.Property1%></label>
    <%}%>