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), но и саму статью, чтобы я мог ее показать. Однако, когда я попытался создать объект ViewData следующим образом:

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

Мне не удалось выяснить, как перебрать его в представлении.


person Tom Teman    schedule 30.09.2010    source источник


Ответы (2)


что касается передачи нескольких элементов данных, вы можете сделать это, используя модели представления (предпочтительный способ) или данные представления. если вы хотите передать его через модель просмотра, вы можете сделать что-то вроде

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["key"] вам нужно привести его к соответствующему объекту, например

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

<label><%=m.Property1%></label>
<%}%>
person Muhammad Adeel Zahid    schedule 30.09.2010
comment
большое спасибо! но как именно мне заполнить эту модель представления в контроллере? - person Tom Teman; 30.09.2010
comment
Хорошо, мне удалось заполнить модель представления. Однако затем я пытаюсь получить к нему доступ в представлении, но когда я пишу модель, intellisense не позволяет мне выбрать статью или набор статей. Я пропустил #include или использование или ‹@page ...› в представлении или где-то еще? - person Tom Teman; 01.10.2010

В вашем представлении вы должны быть в состоянии сделать

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

Альтернативным подходом было бы создание нового класса модели представления, который содержал бы и статью, и список:

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

и передайте это в свое представление. Затем вы можете получить к нему доступ через свойство Model, и вы получите строгую типизацию.

person marcind    schedule 30.09.2010