1

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.

2 Answers 2

1

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>
<%}%>
Sign up to request clarification or add additional context in comments.

2 Comments

thank you very much! but how exactly do I "populate this view model" in the controller?
Ok, I managed to populate the view model. However, I then try to access it in the view, but when I write "Model", the intellisense doesn't allow me to choose "Article" or "Articleset". Am I missing an #include or "using" or a <@page ...> in the view or somewhere else?
0

In your View you should be able to do

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

An alternative approach would be to create a new view model class that would hold both the article and the list:

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

and pass that into your view. Then you can access it through the Model property and you will get strong typing.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.