ASP.NET MVC передает несколько экземпляров данных из контроллера для просмотра - PullRequest
1 голос
/ 30 сентября 2010

Я пытаюсь создать приложение 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 ]

1 голос
/ 30 сентября 2010

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

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>
<%}%>
0 голосов
/ 30 сентября 2010

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

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

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

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

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

...