2013-02-20 4 views
1

У меня возникли проблемы с просмотром частичных представлений в MVC4. В настоящее время у меня есть страница профиля пользователя, и я хочу иметь частичное представление, отображающее каждую запись из другой таблицы, содержащей их UserID.MVC 4 Передача данных в частичный вид - Формат

Это HTML-помощник, который я использую для вызова моей функции в контроллере.

@Html.Action("DisplayArticles", "Articles") 

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

[HttpGet] 
    [ChildActionOnly] 
    public ActionResult DisplayArticles() 
     { 
      int id = WebSecurity.CurrentUserId; 
      var articleList = new List<Article>(); 

      //Article articles = (from j in db.Article 
      //   where j.UserID == id 
      //   select j).ToList(); 

      //articleList.AddRange(articles); 
      foreach (Article i in db.Article) 
      { 
       if (i.UserID == id) 
       { 
        articleList.Add(i); 
       } 
      } 


      return PartialView("_DisplayWritersArticle", articleList); 
     } 

Мой частичный вид _DisplayWriterArticle просто использует HTML-помощники для отображения данных.

@model Writegeist.Models.Article 

    <table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.UserID) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Title) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Type) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Content) 
     </th> 
    </tr> 
    <tr> 
     <th> 
      @Html.DisplayFor(model => model.UserID) 
     </th> 
     <td> 
      @Html.DisplayFor(model => model.Title) 
     </td> 
     <td> 
      @Html.DisplayFor(model => model.Type) 
     </td> 
     <td> 
      @Html.DisplayFor(model => model.Content) 
     </td> 
    </tr> 

</table> 

Моя проблема заключается в том, что путь я передаю мой список в поле зрения, он не получает признания, и я получаю ошибку

> The model item passed into the dictionary is of type 
> 'System.Collections.Generic.List`1[Writegeist.Models.Article]', but 
> this dictionary requires a model item of type 
> 'Writegeist.Models.Article'. 

Если изменить

return PartialView("_DisplayWritersArticle", articleList); 

в

return PartialView("_DisplayWritersArticle", new Writegeist.Models.Article()); 

Я полагаю, статьяList не в правильном формате. Может кто-то указать мне верное направление? Спасибо

+0

У вас нет кода для частичного _DisplayWritersArticle, но похоже, что он имеет модель, установленную как единый Writegeist.Models.Article. Вы отправляете ему список статей, который он не знает, как с этим бороться. Отправьте свой код частичного просмотра. – jmoerdyk

+0

Я думал, что мне это не нужно, потому что это было так просто. Я включил его сейчас. – lagref

ответ

1

Ваш частичный просмотр ожидает отдельную статью, вы даете ей список из них.

Изменить модель к списку статей:

@model List<Writegeist.Models.Article> 

Тогда вы должны перебрать список, чтобы показать их всех:

<table> 
@foreach(Article article in Model) { 
    <tr> 
     <th> 
      @Html.DisplayNameFor(a => article.UserID) 
     </th> 
     <th> 
      @Html.DisplayNameFor(a => article.Title) 
     </th> 
     <th> 
      @Html.DisplayNameFor(a => article.Type) 
     </th> 
     <th> 
      @Html.DisplayNameFor(a => article.Content) 
     </th> 
    </tr> 
} 
</table> 
+0

Спасибо, это сработало! Я знал, что это что-то маленькое. – lagref

+0

Это был тот же самый ответ, который я дал хе. –

0

Проблема заключается в том, как я вижу, что вы передавая список, но вы говорите, что это просто статья.

Меняйте

@model Writegeist.Models.Article to @model List<Writegeist.Models.Article> 

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

+0

Я сделал это, но я получил сообщение об ошибке: «System.Collections.Generic.List » не содержит определения для «UserID» Он определенно объявлен в моем классе модели, хотя – lagref

+1

Но вы пытаетесь получить доступ к 'UserID' _List_ статей, а не к отдельной статье' Article', и у нее нет свойства 'UserID'. Вы должны выполнить итерацию по списку, а затем попытаться получить доступ к 'UserID' каждого _individual_ члена списка. – jmoerdyk

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