在此代码中
public ActionResult Index(int? id)
{
return View();
}
int? id
做了什么?
我们也能用这种格式写吗?
public ActionResult Index()
{
int id;
return View();
}
答案 0 :(得分:6)
它允许您将参数传递给Action。
如果您的路线指定如下:
"{controller}/{action}/{id}"
然后,您就可以调用网址YourController/Index/1
,1
将被传递到您的操作中。
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/Index
和yourControllerName/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();
}