Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解释我的方法的参数是'null'而不是'int'`_C#_Asp.net Mvc_Nullable - Fatal编程技术网

C# 如何解释我的方法的参数是'null'而不是'int'`

C# 如何解释我的方法的参数是'null'而不是'int'`,c#,asp.net-mvc,nullable,C#,Asp.net Mvc,Nullable,我需要知道如何解释我的方法的参数是null,而不是int 我有一个方法,它应该接收一个int [HttpGet] public ActionResult UpdateUser(int userId){ } 然而,当会话超时,而我在调用该方法的中间回滚时,它会收到一个 null ,而不是 int 。 这会导致以下错误: 参数字典包含参数“userId”的空条目 方法的不可为Null的类型“System.Int32” 中的“System.Web.Mvc.ActionResult U

我需要知道如何解释我的方法的参数是
null
,而不是
int

我有一个方法,它应该接收一个int

    [HttpGet]
    public ActionResult UpdateUser(int userId){ }

然而,当会话超时,而我在调用该方法的中间回滚时,它会收到一个<代码> null <代码>,而不是<代码> int <代码>。 这会导致以下错误:

参数字典包含参数“userId”的空条目 方法的不可为Null的类型“System.Int32” 中的“System.Web.Mvc.ActionResult UpdateUser(Int32)” “Controllers.UserController”。可选参数必须是 引用类型、可为null的类型或可声明为可选类型 参数参数名称:参数

我需要一种方法来解释接收
null
参数的原因

到目前为止,我已经尝试使用如下可为null的int类型重载该方法

    [HttpGet]
    public ActionResult UpdateUser(int? userId){ }
但这只会接收每个UpdateUser()调用,并将值转换为
null


有什么建议吗?

过载的签名可能是以下内容,
用户ID将不会提供:

[HttpGet]
public ActionResult UpdateUser(){ }
i、 e.未提供用户ID,而不是为其提供
null

我之所以说“可能”,是因为您的请求实际上可能没有指定任何值的参数/参数

如果是这种情况,您可能应该只使用一个签名:

[HttpGet]
public ActionResult UpdateUser(int? userId){ }
用支票

if (userId.HasValue)
{
    // ok... you can use userId.Value
}
else
{
    // not ok...
}

你能不能不用签名

[HttpPost]
public ActionResult UpdateUser(int? userId = 0){ }

这应该检查它是否为null,如果为null,则将其设置为0。

我在这里厌倦了这两种方法,当我使用第一个解决方案时出现此错误“控制器类型“UserController”上的当前操作请求“UpdateUser”在以下操作方法之间不明确:System.Web.Mvc.ActionResult UpdateUser()在type Controllers.UserController System.Web.Mvc.ActionResult UpdateUser(Int32)上在type Controllers.UserController上“当我使用第二个解决方案时,无论发生什么情况,我都会将一个空值发送到userId。它不会出错,但是当它应该得到一个int值时,它会得到一个null值。这就是解决方案。经过一段时间的研究,你的第二个解决方案对我起了作用。谢谢。你不需要第一种方法。第二个方法将处理两种情况…null或int。如果是null…重定向到。。。什么…登录屏幕?当我实现第二个方法时,它似乎会在每次调用时覆盖第一个方法。它的目的是捕获由于会话超时而丢失int值的事件,但是在实现时,它会覆盖UpdateUser(int userId)方法,并且该值始终转换为null。其目的是捕获将出错的不寻常事件,然后重定向到新页面。在重新阅读您的评论后,我看到您说我不需要第一个方法,但问题是第二个方法似乎正在将值转换为null,而第一个方法不需要。您传递的参数需要为int?也。