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

C# 如何在MVC中配置路由到分页列表,c#,model-view-controller,routes,C#,Model View Controller,Routes,我有一个控制器: 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

我有一个控制器:

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());
    }
这是我的路线:

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或mysite.com/restaurant/2
,以反映分页

我收到
错误404

我认为路线不正确,但我不知道如何正确配置它


谢谢。

添加属性[HttpGet],然后再试一次

mysite.com/restaurant?name=peter&page=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

您已在routeconfig中将参数定义为可选参数

page= UrlParameter.Optional
您的方法表明它不是可选的。更改方法使页面为可选页面可能会解决您的问题。这将创建一个新问题,因为用户不能简单地输入页码。您可以通过检查页面是否为空来解决此问题,如果为空:返回页面0(或1,任何您想要的)。新方法将从以下内容开始:

public ActionResult Index(string name, int? page = 0)

您的路线完全错误,应该更像这样:

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
     );