C# 基于查询的asp.net MVC分页

C# 基于查询的asp.net MVC分页,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我试图在MVC新闻网站的帖子中添加下一页/上一页分页。文章类型为故事、照片库或视频。该网站有不同的页面列出这些帖子,如按类型过滤故事、照片库、视频或问题。所以我希望我的下一个和上一个按钮基于他们正在查看的任何列表 案例1 查看主索引页无筛选 从列表中选择一个故事[导航到该故事的页面] 单击第页[导航到所有项目集合中下一个项目的页面]上的下一个链接 单击此页面上的“下一步”链接,继续浏览所有项目集合中的项目。 案例2 查看第2期的视频帖子 从列表[导航到视频页面]中选择视频 单击第页上的下一个链接

我试图在MVC新闻网站的帖子中添加下一页/上一页分页。文章类型为故事、照片库或视频。该网站有不同的页面列出这些帖子,如按类型过滤故事、照片库、视频或问题。所以我希望我的下一个和上一个按钮基于他们正在查看的任何列表

案例1

查看主索引页无筛选 从列表中选择一个故事[导航到该故事的页面] 单击第页[导航到所有项目集合中下一个项目的页面]上的下一个链接 单击此页面上的“下一步”链接,继续浏览所有项目集合中的项目。 案例2

查看第2期的视频帖子 从列表[导航到视频页面]中选择视频 单击第页上的下一个链接[导航到第2期视频集中的下一个视频页面] 单击此页面上的“下一步”链接,继续浏览第2期中视频集合中的项目。 项目来自存储库,不同的筛选页面只使用LINQ表达式按项目类型或问题筛选项目集合。在他们查看的第一篇文章中获取下一个/上一个链接很容易,但是从该页面我如何确定他们正在查看的项目,并以某种方式将其传递给他们所浏览的任何其他文章

控制器代码

索引列出所有故事,过滤到故事-视频和照片类似于故事方法

public ActionResult Index(string issueUrl)
{
    if (!string.IsNullOrEmpty(issueUrl))
    {
        var issueItems = ItemRepository.Items.ForIssue(issueUrl);
        if (issueItems.Count() > 0)
        {
            ViewBag.IssueTitle = issueItems.First().IssueTitle;
            ViewBag.IssueUrl = issueItems.First().IssueUrl;
            return View("Index", issueItems.ForTag(Request["tag"]).ByDateDesc());
        }
        else { return NothingToShow(true); }
    }
    else
    {
        return View(ItemRepository.Items.ForTag(Request["tag"]).ByDateDesc());
    }
}

public ActionResult Stories(string issueUrl, string itemUrl)
{
    var stories = ItemRepository.Items.Stories();

    if (!string.IsNullOrEmpty(itemUrl))
    {
        var item = stories.ItemForUrl(itemUrl);
        if (item != null)
        {
            return View("Story", item);
        }
        else { return NothingToShow(true); }
    }

    if (!string.IsNullOrEmpty(issueUrl))
    {
        var tempStories = stories.ForIssue(issueUrl);
        if (tempStories.Count() > 0)
        {
            stories = tempStories;
            ViewBag.IssueTitle = stories.First().IssueTitle;
            ViewBag.IssueUrl = stories.First().IssueUrl;
        }
        else { return NothingToShow(); }
    }

    return View("Index", stories.ForTag(Request["tag"]).ByDateDesc());
}
我正在使用ASP.NETMVC5。视图是根据文章类型故事、照片库、视频或索引页的文章集合强类型的

URL结构

问题:

澄清一下:我如何才能在文章页面上创建下一页/上一页,通过它们所在的列表页面上的文章进行分页

编辑


突出显示-复杂的是,当用户从列表页面导航到单个故事时,我需要以某种方式保留帖子列表,然后再翻页。此列表是从存储库中创建的筛选版本。索引中显示的列表与故事中显示的列表不同。

计算动作中不同的下一个和上一个链接,通过ViewModel将它们发送到视图,并使用这些链接制作按钮。

要计算这个,我不需要向动作传递表示他们正在查看的项目列表的内容吗,然后可以根据所选内容计算“下一个”和“上一个”?我看你只需要当前页码即可。@BradleyUffner照片库2可能是仅查看照片库时的第二项,但如果他们从显示其他文章的索引页中选择照片库2,则可能是第五项。因此,一个简单的页码并不能给我足够的信息来知道下一个或上一个项目是什么。当从列表页面选择某个项目时,必须有某种初始化状态。列表是由操作而不是视图生成的。我同意@BradleyUffner。首先,您需要通过模型将所有必要的信息传递给视图:如类别-可以是故事、摄影、视频、第一页加载时为1的页码以及每个类别中的项目总数。然后每次单击Next时,您都会更新PageNo并查询服务器以获取该类别下一页的数据。当用户单击“上一页”时,请执行相同的操作。当用户单击Next/Previous时,您需要返回更新的页码。当用户选择其他类别时,将PageNo重置回1
/myapp/                   (Index showing stories, photoGalleries, and videos)
/myapp/23                 (Index filtered to issue 23)
/myapp/23/stories         (Issue 23 filtered to show only stories)
/myapp/stories            (All Stories)
/myapp/stories/story-url  (A single Story)
[repeat above three for photos and videos]