Asp.net mvc 如何在ASP.NET MVC 5中进行分页路由

Asp.net mvc 如何在ASP.NET MVC 5中进行分页路由,asp.net-mvc,asp.net-mvc-5,pagination,routing,Asp.net Mvc,Asp.net Mvc 5,Pagination,Routing,我正在ASP.NET MVC 5中为一个应用程序进行分页,并且一直停留在分页的路由上。以下是我尝试使用的格式: <a href="~/Home/page/1)">Next</a> 控制器: public ActionResult Index(int? page) { MainDbContext db = new MainDbContext(); var listItems = new List<List>()

我正在ASP.NET MVC 5中为一个应用程序进行分页,并且一直停留在分页的路由上。以下是我尝试使用的格式:

<a href="~/Home/page/1)">Next</a>
控制器:

    public ActionResult Index(int? page)
    {
        MainDbContext db = new MainDbContext();

        var listItems = new List<List>();

        if (User.Identity.IsAuthenticated)
        {
            listItems = (db.Lists.ToList());
        }
        else
        {
            listItems = (db.Lists.Where(m => m.Public == "Yes").ToList());
        }

        var pager = new Pager(listItems.Count(), page);

        var viewModel = new List
        {
            Items = listItems.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList(),
            Pager = pager
        };

        return View(viewModel);
    }
public ActionResult索引(int?页)
{
MainDbContext db=新的MainDbContext();
var listItems=新列表();
if(User.Identity.IsAuthenticated)
{
listItems=(db.Lists.ToList());
}
其他的
{
listItems=(db.Lists.Where(m=>m.Public==“Yes”).ToList();
}
var pager=新的寻呼机(listItems.Count(),第页);
var viewModel=新列表
{
Items=listItems.Skip((pager.CurrentPage-1)*pager.PageSize.Take(pager.PageSize.ToList(),
寻呼机
};
返回视图(viewModel);
}

我不确定我做的事情是否正确。但现在,当我运行该应用程序时,对于分页部分,它在“/”应用程序中显示以下消息“服务器错误-找不到资源”。我是否需要配置其他内容,并希望专家提供建议。谢谢。

要使分页路由规则正常工作,您需要定义不同的操作

例如:

routes.MapRoute( //Route For The Pagination
    "Home",
    "Home/page/{page}",
    defaults: new { controller = "Home", action = "PagedIndex" }
    );
然后,在
HomeController
内部实现
PagedIndex
操作

public ActionResult PagedIndex(int? page)
{
    // code here to build your model
    return View("Index", viewModel);
}
您还需要更改
返回视图(viewModel)
返回视图(“索引”,视图模型)。否则,它将尝试运行
PagedIndex
视图

编辑:添加整个文件:

应用程序启动/RouteConfig.cs

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute( //Route For The Pagination
            "Home",
            "Home/page/{page}",
            defaults: new { controller = "Home", action = "PagedIndex" }
            );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
    public ActionResult Index()
    {
        Models.Home.Index model = new Models.Home.Index();

        return View("Index", model);
    }

    public ActionResult PagedIndex(int? page)
    {
        Models.Home.Index model = new Models.Home.Index();
        model.page = page ?? 0;

        return View("Index", model);
    }

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}
// You won't need this, it is just a mock model I created to test the code
namespace SOQuestion.Models.Home
{
    public class Index
    {
        public int page { get; set; }

        public Index()
        {

        }
    }
}
控制器/HomeController.cs

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute( //Route For The Pagination
            "Home",
            "Home/page/{page}",
            defaults: new { controller = "Home", action = "PagedIndex" }
            );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
    public ActionResult Index()
    {
        Models.Home.Index model = new Models.Home.Index();

        return View("Index", model);
    }

    public ActionResult PagedIndex(int? page)
    {
        Models.Home.Index model = new Models.Home.Index();
        model.page = page ?? 0;

        return View("Index", model);
    }

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}
// You won't need this, it is just a mock model I created to test the code
namespace SOQuestion.Models.Home
{
    public class Index
    {
        public int page { get; set; }

        public Index()
        {

        }
    }
}
型号/索引.cs

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute( //Route For The Pagination
            "Home",
            "Home/page/{page}",
            defaults: new { controller = "Home", action = "PagedIndex" }
            );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
    public ActionResult Index()
    {
        Models.Home.Index model = new Models.Home.Index();

        return View("Index", model);
    }

    public ActionResult PagedIndex(int? page)
    {
        Models.Home.Index model = new Models.Home.Index();
        model.page = page ?? 0;

        return View("Index", model);
    }

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}
// You won't need this, it is just a mock model I created to test the code
namespace SOQuestion.Models.Home
{
    public class Index
    {
        public int page { get; set; }

        public Index()
        {

        }
    }
}
视图/Home/Index.cshtml

@model SOQuestion.Models.Home.Index

@{
    ViewBag.Title = "Home Page";
}

<div class="row">
    <div class="col-md-12">
        <h2>This is the <b>Index</b> view</h2>
        <p>
            Current index is: <b>@Model.page</b>
        </p>
        <p>
            @if (Model.page > 0)
            {
                <a class="btn btn-info" href="/Home/Page/@(Model.page - 1)">Previous</a>
            }

            <a class="btn btn-info" href="/Home/Page/@(Model.page + 1)">Next</a>
        </p>
    </div>
</div>
@model SOQuestion.Models.Home.Index
@{
ViewBag.Title=“主页”;
}
这是索引视图

当前索引为:@Model.page

@如果(Model.page>0) { }


你能发布处理寻呼路由的控制器吗?我已经编辑了帖子。我希望,您询问了上述处理分页的控制器。如果我错过了什么,请告诉我,因为我对ASP.NET MVC一无所知。谢谢。我想
中的
是打字错误吧?否则,您显示的代码将正常工作。这些是唯一的路线吗?它们是否按照您显示的顺序排列?是的。它们的顺序如图所示。基本上,我在前端使用razor进行分页,如下所示:@Html.ActionLink(“下一步”,“索引”,“主页”,new{page=(Model.Pager.CurrentPage+1)},null),甚至尝试了这个:。我对此有点困惑。在后端还有什么需要配置的吗?我期待您在这方面的建议,并尝试下面提供的解决方案。但没有起作用。谢谢。试过了,但没用。我正在使用HomeController并在同一控制器中实现了您的建议。您是否也更改了路由规则(例如
action=“PagedIndex”
而不是
action=“Index”
)?是并创建了该操作。有没有其他方法可以获得这种格式:我是说在控制器中?顺便问一下,为什么我们需要另一个行动来这么做?嗯。。。问题是我在发帖前试过这个代码,它成功了。分页的路由规则是否在默认规则之前?是。它是。请参见,我正在视图中使用此项:。那么它是否会产生冲突?每当我运行项目时,它都会显示:“/”应用程序中的服务器错误-找不到资源”。