Nullable int作为动作参数

时间:2016-01-11 01:06:12

标签: c# asp.net-mvc

在此代码中

public ActionResult Index(int? id)
{
  return View();
}

int? id做了什么?

我们也能用这种格式写吗?

public ActionResult Index()
{
  int id;
  return View();
}

2 个答案:

答案 0 :(得分:6)

它允许您将参数传递给Action。

如果您的路线指定如下:

"{controller}/{action}/{id}"

然后,您就可以调用网址YourController/Index/11将被传递到您的操作中。

int后面的问号表示它是Nullable<int>,也就是可选参数。如果它不在网址中,则ID为null

您的备用语法不起作用。

答案 1 :(得分:3)

Id是Index操作方法的参数。使用默认路由定义时,当您的Index操作方法发出请求时,具有Id参数值的url(URL段)部分将映射到Action方法的Id参数。< / p>

例如,对于请求yourSiteName.com/yourControllerName/Index/350,您的索引操作方法将被执行,350参数中将显示Id,并且可以在您的方法中访问。

int?表示它是可空的int,这意味着该值可以为null。当您没有为可为空的int参数提供值时,它将为NULL。

就MVC路由而言,这意味着可以使用默认路由定义来访问操作方法,如yourControllerName/IndexyourControllerName/Index/23。有时人们使用它来返回没有Id值的请求的列表/索引视图,并返回传递了Id的请求的特定项目。

因此,在访问该值之前,您应该检查它是否为null。如果它不为null,则可以使用Value属性来获取存储在param中的值。

public ActionResult Index(int? id)
{
  if(id!=null)
  {
   //request came with a value for id param. Let's read it.
    var idValue =id.Value;
   //do something with the IdValue which is an Int       
  }
  else
  {
    //request came without a value for id param
  }
  return View();
}