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