如何在MVC中配置路由到分页列表
本文关键字:路由 分页 列表 配置 MVC | 更新日期: 2023-09-27 18:07:20
我有这个控制器:
public class RestaurantController : Controller
{
public ActionResult Index(string name, int page = 0)
{
int pageSize = 4;
@ViewBag.dropCitys = _db.Restaurantes.Select(c => c.Name).Distinct();
var model = from res in
_db.Restaurantes
orderby res.Name descending
where ( (!string.IsNullOrEmpty(name)? res.Name.Contains(name) : res.Name!="") )
select res;
return View(model.Skip(pageSize * page).Take(pageSize).ToList());
}
This is my Route:
routes.MapRoute(
"Restaurant",
"{controller}/{action}/{page}",
new { controller = "restaurant", action = "index", page= UrlParameter.Optional },
namespaces: new string[] { "MVCIntro.Controllers" } //usa-se isso para funcionar a AREA
);}
我尝试访问像mysite.com/restaurant/1 or mysite.com/restaurant/2
这样的页面来反映分页。
我收到error 404
。
我认为路由不正确,但我不知道如何正确配置。
谢谢。
你的路由完全错了,应该看起来更像这样:
routes.MapRoute(
"Restaurant",
"{name}/{page}",
new { controller = "restaurant", action = "index", name= UrlParameter.Optional page= UrlParameter.Optional },
namespaces: new string[] { "MVCIntro.Controllers" } //usa-se isso para funcionar a AREA
);
,但这可能会与你的默认路由冲突,所以,这是更友好的
routes.MapRoute(
"Restaurant",
// find as it looks like you are searching for a reastraunt.
"find/{name}/{page}",
new { controller = "restaurant", action = "index", name= UrlParameter.Optional page= UrlParameter.Optional },
namespaces: new string[] { "MVCIntro.Controllers" } //usa-se isso para funcionar a AREA
);
你已经在路由配置中将你的参数定义为可选。
page= UrlParameter.Optional
你的方法表明它不是可选的。更改您的方法,使页面是可选的可能会解决您的问题。这将创建一个新的问题,因为用户不能简单地输入页码。您可以通过检查页面是否为空来解决这个问题,如果是:返回页面0(或1,无论您想要什么)。新方法将以:
开头public ActionResult Index(string name, int? page = 0)
添加属性[HttpGet],并尝试
mysite.com/restaurant ?名字= peter&页面= 1
或者您可以将路由更改为
routes.MapRoute(
"Restaurant",
"{controller}/{action}/{page}",
new { controller = "restaurant", action = "index", name="name", page= "page"},
namespaces: new string[] { "MVCIntro.Controllers" } //usa-se isso para funcionar a AREA
);}
并使用URL
mysite.com/restaurant/peter/1