通过html.action结果迭代

时间:2016-11-28 11:05:26

标签: c# asp.net-mvc razor

我的Controller类中有以下ActionResult方法,它返回帖子:

public ActionResult Feed()
{
    List<Models.Post> posts = getPosts();
    return PartialView(posts);
}

如何迭代这些结果(为每个帖子创建一个新的div)。 我试过@foreach (var item in Html.Action("Feed")),但这没效果。

更新3:

以下是此问题的所有相关代码。我也停止使用帖子的模型,现在直接使用LinqToTwitter.Status对象。

FeedController.cs

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Feed()
    {
        return PartialView(GetStatuses());
    }

    private List<LinqToTwitter.Status> GetStatuses()
    {
        //Code to get tweets
    }

Index.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ViewBag.Title = "Feed";
}

<div class="FeedPage" id="FeedPage">

    <div class="FeedPosts" id="FeedPosts">
    @{
        Html.Action("Feed");
    }
    </div>

    <div class="FeedAlternatives">
        <div class="FeedAlternativeContent">

        </div>
    </div>

    <div class="FeedOptions hidden">

    </div>

</div>

Feed.cshtml

@model List<LinqToTwitter.Status>

<div class="FeedPosts" id="FeedPosts">
    @foreach (var item in Model)
    {
        <div class="FeedPost SocialUpdate">
            @*More divs for design*@
        </div>
    }
</div>

在Index.cshtml中Html.Action("Feed");抛出异常: enter image description here

相应的网站结果: enter image description here

2 个答案:

答案 0 :(得分:1)

您的代码@foreach (var item in Html.Action("Feed"))无法按您认为的那样运作。

Html.Action("Feed")将执行ActionResult,它可以返回视图(HTML),JSON,文件等等...在您的情况下,它返回PartialView,这意味着它会返回一个HTML 。

所以你如何编码呢。在您的主视图中,在您想要div的位置添加这行代码。

@Html.Action("Feed")

然后使用您当前的ActionResult

public ActionResult Feed()
{
    List<Models.Post> posts = getPosts();
    return PartialView(posts);
}

在项目解决方案中添加新的部分视图。此部分视图必须采用List<Post>类型模型,然后循环它。

您的部分视图名称应为Feed,其内容如下所示。

@model List<Model.Post>

@foreach (var post in Model){
  //post will be a instance of each Post object.
  <div>
  <h1> post.Header</h1>      // just an example
  </div>
}

答案 1 :(得分:0)

您必须使用Model

在这种情况下,Model将是Post个对象的集合,您必须迭代它。

请试试这个:

@foreach (var item in Model){

}

在来自控制器的Feed方法中,您将Post列表传递给了PartialView

public ActionResult Feed()
{
    List<Models.Post> posts = getPosts();
    return PartialView(posts);
}

因此,在Feed.cshtml局部视图的顶部使用此:

@model IEnumerable<Models.Post>