为了账号安全,请及时绑定邮箱和手机立即绑定

远程验证随机抛出“字典包含空条目”错误

远程验证随机抛出“字典包含空条目”错误

C#
肥皂起泡泡 2021-07-01 14:11:05
当远程验证尝试检查数据库中是否已经存在一个值时,我收到了这个超级烦人的错误:参数字典包含“ADVWKSP.Controllers.CRMTItemsController”中方法“System.Web.Mvc.JsonResultDoesGbSNumberExist(Int32)”的不可为空类型“System.Int32”的参数“gbsNumber”的空条目。可选参数必须是引用类型、可为空类型或声明为可选参数。参数名称:参数at System.Web.Mvc.ActionDescriptor.ExtractParameterFromDictionary(ParameterInfo parameterInfo, IDictionary`2 parameters, MethodInfo methodInfo)at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult)它间歇性地发生,我无法找出任何类型的模式 - 这似乎完全是随机的。它发生在我的两个字段上,这两个字段都映射到视图模型中的整数属性。它不仅会填满我的错误日志,还会破坏表单,以至于有时提交按钮不起作用,这很烦人。
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我将参数类型更改为int?并且从那时起就没有看到错误,所以希望问题得到解决,但我们会看到。


更新控制器:


[HttpPost]

public JsonResult DoesGbSNumberExist(int? gbsNumber)

{

    using (var db = new ADVWKSPEntities())

    {

        return (gbsNumber == null) ? Json(false) : Json(!db.CRMTItems.Any(i => i.GbsNumber == gbsNumber));

    }

}


查看完整回答
反对 回复 2021-07-11
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您的视图模型将整数值定义为可为空的 int int?。一个可为空的 int 仅在它包含一个值时才能与一个 int 进行比较。

您的线路:

return Json(!db.CRMTItems.Any(i => i.GbsNumber == gbsNumber));

应该测试为空:

return Json(!db.CRMTItems.Any(i => (i.GbsNumber ?? 0) == gbsNumber));

用 GbsNumber 不包含的值替换零。


查看完整回答
反对 回复 2021-07-11
  • 2 回答
  • 0 关注
  • 247 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信