Asp.net mvc 如何在ASP.NET MVC 5中进行分页路由
我正在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>()
<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”
)?是并创建了该操作。有没有其他方法可以获得这种格式:我是说在控制器中?顺便问一下,为什么我们需要另一个行动来这么做?嗯。。。问题是我在发帖前试过这个代码,它成功了。分页的路由规则是否在默认规则之前?是。它是。请参见,我正在视图中使用此项:。那么它是否会产生冲突?每当我运行项目时,它都会显示:“/”应用程序中的服务器错误-找不到资源”。