2010-09-30 3 views
1

Je suis en train de créer une application ASP.NET MVC 2. Je veux passer des données à une vue depuis un contrôleur. Je suis capable de le transmettre quand il n'y a qu'une seule structure de données. Dans le contrôleur:ASP.NET MVC passant plusieurs instances de données du contrôleur à afficher

private ArticlesDBEntities _db = new ArticlesDBEntities(); 

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

et dans la vue, je réitérait sur la liste comme ceci:

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

(les nœuds enfants sont, pour des raisons de test en ce moment, n'ont pas un rôle réel)

Cependant, je veux maintenant gérer un scénario lorsqu'un utilisateur essaie d'accéder à Home/Articles/Id, et non seulement passer la liste d'articles (utilisée pour remplir un jsTree), mais aussi l'article lui-même, afin que je puisse montrer aussi bien. Cependant, quand j'ai essayé de créer un objet ViewData comme ceci:

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

Je ne pouvais pas savoir comment parcourir dans la vue.

Répondre

1

en ce qui concerne le passage de plusieurs éléments de données, vous pouvez le faire en utilisant des modèles de vue (de préférence) ou par des données de vue. si tu veux passer par voir le modèle u peut faire quelque chose comme

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

u peut remplir ce modèle de vue et le transmettre à voir

en vue u peut accéder comme

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

pour itérer sur ViewData ["key"] vous devez le cast à l'objet correspondant comme

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

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

merci beaucoup! mais comment exactement "peupler ce modèle de vue" dans le contrôleur? –

+0

Ok, j'ai réussi à peupler le modèle de vue. Cependant, j'essaie alors d'y accéder dans la vue, mais quand j'écris "Model", l'intellisense ne me permet pas de choisir "Article" ou "Articleset". Ai-je manqué un #include ou "using" ou un <@page ...> dans la vue ou ailleurs? –

+0

Ok, ajouté l'héritage = "..." et maintenant ça marche! :-) –

0

À votre avis, vous devriez être en mesure de faire

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

Une autre approche serait de créer une nouvelle classe de modèle de vue qui tiendrait à la fois l'article et la liste:

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

et passez cela dans votre vue. Ensuite, vous pouvez y accéder via la propriété Model et vous obtiendrez une forte frappe.

Questions connexes