我遇到了一个小问题,我试图在一个视图中显示Facebook,Instagram和Twitter并按日期排序,但我不确定如何实现这一目标
这是我的Twitter的ActionResult,然后我对Instagram和Facebook几乎完全相同
var twitterContext = new TwitterContext(auth);
ulong sinceId = 1;
const int Count = 20;
var combinedSearchResults = new List<Status>();
var tweets =
await
(from tweet in twitterContext.Status
where tweet.Type == StatusType.User &&
tweet.Count == Count &&
tweet.RetweetedStatus.StatusID == 0 &&
tweet.ExcludeReplies == true &&
tweet.SinceID == sinceId
select new NewsViewModel
{
DateAdded = tweet.CreatedAt,
ScreenName = tweet.User.ScreenNameResponse,
Text = tweet.Text,
StatusId = tweet.StatusID
})
.ToListAsync();
return View(tweets);
}
如何将所有这3个放在一起并在索引视图中显示? 我对这些东西不熟悉,非常感谢答案和帮助
答案 0 :(得分:1)
如果我理解正确,您想要获取所有三个来源并将它们一起显示在一个列表中。
假设您可以将所有三种转换为NewsViewModel
类型,那么只需将Facebook和Instagram的结果添加到同一列表中,然后将一个列表传递给您的视图。
所以你不要使用三个视图 - 你从控制器中的三个数据源获取数据,然后将统一列表传递给一个视图。
这样的事情(巩固,但你明白了):
var posts = await (from tweet ...).ToListAsync(); //what you already have
posts.AddRange(await (from facebook ....).ToListAsync());
posts.AddRange(await (from instagram ....).ToListAsync());
return View(posts);
答案 1 :(得分:1)
可以通过创建来自Microsoft.AspNetCore.Mvc.ViewComponent
:
public class TwitterViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(string parameter)
{
...
return View(tweets);
}
}
然后根据您的需要创建公共视图Views\Shared\Components\Twitter\Default.cshtml
或特定于控制器视图Views\[controllerName]\Components\Twitter\Default.cshtml
。
然后你可以像这样呈现你的组件:
<div>
@await Component.InvokeAsync("Twitter", new { parameter = "parameterValue"})
</div>
您可以在视图中渲染子操作:
<div>
@{Html.RenderAction("Twitter");}
</div>
答案 2 :(得分:0)
可能你想要这个:
var postList = new PostList();
var twitterPost = await GetTwitterpost(....);
var fbPost = await GetFbPost(....);
var instagramPost = await GetInstagramPost(....);
if(twitterPost !=null)
postList.AddRange(twitterPost);
if(fbPost !=null)
postList.AddRange(fbPost);
if(instagramPost !=null)
postList.AddRange(instagramPost);
postList = postList?.OrderByDescending(p=>p.DateAdded).ToList();
return View(postList);
我不知道我是否真的明白你的意思!但是通过这种方式,您可以在一个集合中获得所有帖子,并且可以按日期显示它们。