我无法理解MVC4中的部分视图。我目前有一个用户个人资料页面,我希望有一个部分视图显示另一个包含其UserID的表中的每个记录。
这是我用来在控制器中调用我的函数的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());
我认为articleList的格式不正确。谁能指出我正确的方向?感谢
答案 0 :(得分: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>
答案 1 :(得分:0)
问题在于我认为你传递的是List,但是你告诉它它只是一篇文章。
更改您的
@model Writegeist.Models.Article to @model List<Writegeist.Models.Article>
然后,您需要遍历该列表以获取您期望的数据。