如何在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

我认为路由不正确,但我不知道如何正确配置。

谢谢。

如何在MVC中配置路由到分页列表

你的路由完全错了,应该看起来更像这样:

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