我已设置此路线:
routes.MapRoute(
"home3", // Route name
"home3/{id}", // URL with parameters
new {
controller = "home",
action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
但是在我的控制器中我不知道如何获取可选的id参数。有人可以解释我如何访问它以及我如何处理它存在或不存在。
由于
答案 0 :(得分:16)
你可以像
一样编写动作方法public ActionResult index(int? id)
{
if(id.HasValue)
{
//do something
}
else
{
//do something else
}
}
答案 1 :(得分:8)
if
语句)正如您在@ Muhammad的回答中所看到的那样(BTW是一个被接受为正确答案的人),很容易将可选参数(实际上任何路由参数)转换为控制器动作。所有你必须确保它们是可空的(因为它们是可选的)。
但是因为它们是可选的,所以最终会出现分支代码,这对于维护单元测试更加困难。因此,通过使用一个简单的动作方法选择器,可以编写类似于此的东西:
public ActionResult Index()
{
// do something when there's not ID
}
[RequiresRouteValues("id")]
public ActionResult Index(int id) // mind the NON-nullable parameter
{
// do something that needs ID
}
在这种情况下使用了自定义操作方法选择器,您可以在my blog post中找到其代码和详细说明。这些行为易于掌握/理解,单元测试(没有不必要的分支)和维护。