为什么在某些默认的MVC操作中id可以为空?

时间:2017-10-04 20:39:03

标签: c# asp.net asp.net-mvc asp.net-mvc-4

在ASP.NET MVC应用程序中,当我们在Visual Studio中构建控制器时,我们会得到默认操作:

  • 索引
  • 创建
  • 删除
  • 修改
  • 详细

在上面,有一些参数可以为空(int? id):详细信息,编辑(GET版本),删除,删除确认。然后在至少一些中,有以下代码来确保ID不为空:

if (id == null)
{
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}

所有这些行动都需要身份证;它不是可选的。您无法显示任何内容的详细信息或删除任何内容等。此外,如果它们为空,我们将生成BadRequest状态代码。

那么为什么这些参数不能以非可空整数开头呢?

1 个答案:

答案 0 :(得分:3)

我相信这是因为int的默认值是0。如果您按照建议将其设置为int id,则模型绑定器会为您提供默认值0,这意味着您无法区分是否实际提供了0或是否它只是违约。

编辑:一直在考虑这个问题。它是可选的,因为它在一般路由模板的更高级别定义 - 某些操作需要它而其他操作不需要。

我错误地认为这样的简单参数的默认值为0 - 请参阅注释。