这是我的默认路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我希望能够获得id
参数。
这是控制器:
public ActionResult Index(int page = 1)
{
var cars = repositoryManager.CarRepository.GetAll().Skip(page).Take(1).ToList();
return View(cars);
}
事情是我进入时:
/home/index/5
page
仍为1
。为什么?仅当page
是默认参数时,1
才会<xsl:apply-templates select="Term/Ext[@name = 'demo']"/>
。
答案 0 :(得分:1)
page
为1,因为您传递的id
为5而非page
,因此page
将获得其默认值1。
如果您将page
的名称更改为id
您的代码有效,但这不是一个好的命名!
public ActionResult Index(int id = 1)
{
var cars = repositoryManager.CarRepository.GetAll().Skip(id).Take(1).ToList();
return View(cars);
}
您还可以将page
作为查询字符串/home/index?page=5
答案 1 :(得分:0)
动作参数由Value Providers传递给动作方法。当键(参数的名称)与值源中的键匹配时,这些提供程序通过提供操作方法参数来工作。路由值和查询字符串都有值提供程序,但无论它们从传入的密钥中提取数据的位置都必须与数据源的密钥匹配。
路由值的默认路由中定义的键是controller
,action
和id
:
url: "{controller}/{action}/{id}"
但是,您在操作方法中定义的键是page
:
public ActionResult Index(int page = 1)
由于该源中没有名为page
的密钥,因此路由值不会将任何值传递到您的操作方法,并且它将继续尝试其他来源,例如查询字符串。如果在任何值提供程序中找不到名为page
的值,则该值将为空,因此将使用您的默认操作方法值。
最简单的解决方法是将操作方法中的密钥重命名为id
:
public ActionResult Index(int id = 1)
或者,创建一个专门的路线并将密钥传递为page
而不是id
:
routes.MapRoute(
name: "DefaultWithPage",
url: "Home/Index/{page}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);