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 собственности, и вы получите сильный набор текста.

Другие вопросы по тегам