2010-09-30 4 views
1

Я пытаюсь создать приложение ASP.NET MVC 2. Я хочу передать данные на просмотр с контроллера. Я могу передать его, когда это только одна структура данных. В контроллере:ASP.NET MVC передаёт несколько экземпляров данных из контроллера для просмотра

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> 

(дочерние узлы по причинам тестирования прямо сейчас, не реальную роль)

Однако теперь я хочу обработать сценарий, когда пользователь пытается получить доступ к «Главная/Статьи/Идентификатор» и не только передает список статей (используется для заполнения jsTree), но также и сама статья, поэтому я могу показать это также. Однако, когда я попытался создать объект ViewData так:

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

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

ответ

1

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

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

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

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

большое спасибо! но как именно я «заполняю эту модель представления» в контроллере? –

+0

Хорошо, мне удалось заполнить модель обзора. Тем не менее, я затем пытаюсь получить к нему доступ в представлении, но когда я пишу «Модель», intellisense не позволяет мне выбирать «Article» или «Articleset». Я пропускаю #include или «использование» или <@page ...> в представлении или где-то еще? –

+0

Хорошо, добавил inherits = "...", и теперь это работает! :-) –

0

на ваш взгляд, вы должны быть в состоянии сделать

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

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

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

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

Смежные вопросы