我理解Int是一个不可为空的值,但在MVC中我们使用
的情况public ActionResult Myfunction(int modelattr)
{
if (modelattr != 0) // how is null handled as 0?
{
// do some code
}
}
如何将Null处理为0?
答案 0 :(得分:9)
int
不能是null
。期。许多系统使用0
作为“默认”值并在这种情况下应用特殊逻辑,但它不能为空。
int?
(Nullable<int>
的快捷方式)CAN bu null
,但您的示例不使用该内容。
答案 1 :(得分:3)
结构不能为空且int
is a struct(int
是System.Int32
BTW的别名。
如果您想知道如果您没有为该值指定任何内容,那么“默认”值将是什么(例如,您有int
作为您从未设置的类的属性),您可以得到default(int)
的价值。
如果确实需要结构为空值,则可以使用Nullable包装器。通常这可以缩短为int?
。
答案 2 :(得分:3)
所以你真正要问的是,鉴于这条路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
如果没有指定,控制器如何传递id
值0。
有(至少)两种可能性:
无论如何,没有任何东西可以将null转换为0.在没有指定id的情况下,某处的代码会提供默认值。
答案 3 :(得分:1)
上面的答案为您提供了有关int不能为空的原因以及如何创建可空int的充分信息。但是,要解决您正在研究的问题(没有将ID传递给某个操作),您需要具备以下条件:
在路线配置中(注意可选的ID参数):
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后调整控制器操作签名以匹配以下内容以及空值测试:
public ActionResult Myfunction(int? modelattr)
{
if (modelattr.HasValue()) //this will test if the nullable int has a value or is null
{
// do some code
}
}
最后,您可能希望反转if语句以减少代码执行块的嵌套,具体取决于参数为null时您要执行的操作。例如:
public ActionResult Myfunction(int? modelattr)
{
if (!modelattr.HasValue()) //this will test if the nullable int has a value or is null
{
//throw an exception or return a route to another page
}
//now do your processing, no need to have to stay inside of the if statement.
}
答案 4 :(得分:0)
int永远不会为null,因为它是不可为空的值类型。如果需要,请尝试按如下方式为int分配空值
int i = null;
它会给你错误 无法将null转换为'int',因为它是一个不可为空的值类型