У меня возникают проблемы с частичным просмотром MVC4. В настоящее время у меня есть страница профиля пользователя, и я хочу иметь частичное представление, отображающее каждую запись из другой таблицы, которая содержит их идентификатор пользователя.
Это помощник HTML, который я использую для вызова своей функции в контроллере.
@Html.Action("DisplayArticles", "Articles")
Это метод, который я вызываю в своем контроллере Article для отображения статей пользователя.
[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());
Я предполагаю, что articleList не в правильном формате. Может кто-то указать мне верное направление? Спасибо
Ваш частичный просмотр ожидает одну статью, вы даете ему список из них.
Измените модель на список статей:
@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>
Проблема в том, что я вижу, что вы передаете список, но вы говорите, что это просто статья.
Измени свой
@model Writegeist.Models.Article to @model List<Writegeist.Models.Article>
Затем вы захотите перебрать этот список, чтобы получить ожидаемые данные.