ASP.NET MVC передает несколько экземпляров данных из контроллера для просмотра
Я пытаюсь построить приложение 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), но и саму Article, чтобы я мог ее показать. Однако, когда я попытался создать объект ViewData примерно так:
public ActionResult Articles()
{
ViewData["articlesList"] = _db.ArticleSet.ToList();
return View();
}
Я не смог выяснить, как перебрать его в представлении.
2 ответа
Что касается передачи нескольких элементов данных, вы можете сделать это, используя модели представления (предпочтительный способ) или viewdata. если вы хотите пройти через View model, вы можете сделать что-то вроде
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["ключ"], вы должны привести его к соответствующему объекту, как
<%=foreach(var m in (ArticleSet)ViewData["Articles"]){%>
<label><%=m.Property1%></label>
<%}%>
По вашему мнению, вы должны быть в состоянии сделать
<% foreach(var item in ViewData["articlesList"]) %>
Альтернативный подход заключается в создании нового класса модели представления, который будет содержать как статью, так и список:
class ArticleViewModel {
public Article Article { get;set;}
public IEnumerable<Article> Articles { get;set;}
}
и передать это на ваш взгляд. Тогда вы можете получить к нему доступ через Model
собственности, и вы получите сильный набор текста.