MVC 4将数据传递到部分视图 - 格式

时间:2013-02-20 23:25:32

标签: c++ asp.net-mvc-4

我无法理解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的格式不正确。谁能指出我正确的方向?感谢

2 个答案:

答案 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>

然后,您需要遍历该列表以获取您期望的数据。