【问题标题】:Nullable int as action parameter可空 int 作为动作参数
【发布时间】:2016-09-13 20:29:40
【问题描述】:

在本规范中

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

int? id 有什么作用?

我们也可以这样写吗?

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

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

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

如果你有这样指定的路线:

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

然后您将能够调用 URL YourController/Index/11 将被传递到您的操作中。

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

您的替代语法不起作用。

【讨论】:

  • 如果我没有放 int 参数怎么办?假设它的索引(字符串某个值)
【解决方案2】:

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

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

int?表示可以为null的int,也就是可以为null。当你不为可以为null的int参数提供值时,它将为NULL。

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

所以在访问值之前,你应该检查它是否为空。如果它不为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();
}

【讨论】:

  • 当您有一个具有Int 类型属性的类并且您没有在您的类对象上设置此属性的值时,您稍后访问它时会得到 0,我猜这是默认值对于这个值类型。我猜我不应该把它和动作方法参数上下文混在一起。
  • 如果我没有放 int 参数怎么办?假设它的索引(字符串某个值)
  • 然后在您的操作方法中,您可以使用 string.IsNullOrEmpty(somevalue) 检查请求中的值。由于参数名称不是id,所以url应该是index?somevalue=abc
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2023-03-21
  • 2011-01-14
  • 2019-04-18
  • 2012-01-15
相关资源
最近更新 更多