我是MVC 4的初学者。我有一个网址 ../ Home / NameDetailsPage / 20 其中controller = 主页,action = NameDetailsPage 和pageIndex = 20 。如何为此网址编写路由引擎?
routes.MapRoute(
......
.....
);
在控制器中,NameDetailsPage对于默认页面(例如int page = 2: -
)工作得很好 public ActionResult NameDetailsPage(int? page)
{
var context = new BlogContext();
IQueryable<string> list;
list = from m in context.Blogs.OrderBy(m => m.BlogId)
select m.Name;
ViewBag.total = list.ToArray().Length;
ViewBag.page = page;
var pageNumber = page ?? 1;
ViewBag.page1 = pageNumber;
return View("NameDetails", list.Skip(pageNumber * 4).Take(4));
}
但是pageNumber总是1,无论url中的pageIndex是什么。所以它为所有pageIndex显示相同的结果。如何设置除1之外的pageNumber。先谢谢。
答案 0 :(得分:1)
当你有如下路线时
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
);
默认对象属性(controller,action,id)是可以传递给操作的属性(如果操作具有与名称匹配的参数)。
所以如果你有一个动作:
public ActionResult NameDetailsPage(int? page)
没有值作为page
从网址传递。
您可以将{id}
更改为{page}
,或者最好:
public ActionResult NameDetailsPage(int? id)
答案 1 :(得分:0)
根据你的评论,你大部分都在那里。您只需要定义要传递给操作的参数。在这种情况下,为{page}切换{id}并更改默认值以适应。
routes.MapRoute(
name: "Page",
url: "Home/NameDetailsPage/{page}",
defaults: new { controller = "Home", action = "NameDetailsPage", page = UrlParameter.Optional } );