参数字典中包含一个空条目,用于非可空类型'System.Int32'的参数'id'。
参数字典中包含一个空条目,用于非可空类型'System.Int32'的参数'id'。
我正在构建我的第一个MVC应用程序,我在数据库中有一个包含3个列的表:
- Id → 主键
- Username
- password
当我点击编辑链接编辑一条记录时,它抛出以下异常:
参数字典中对于非可空类型'System.Int32'的参数'id'包含一个空条目,用于'MvcApplication1.Controllers.UserController'中的方法'System.Web.Mvc.ActionResult Edit(Int32)'。可选参数必须是引用类型、可空类型或声明为可选参数。
参数名称:参数
这是我的编辑代码:
public ActionResult Edit(int id, User collection) { UserDBMLDataContext db = new UserDBMLDataContext(); var q = from abc in db.User_Login_Details where abc.Id == id select abc; IList lst = q.ToList(); User_Login_Details userLook = (User_Login_Details)lst[0]; userLook.Username = collection.UserName; userLook.Password = collection.Password; db.SubmitChanges(); return RedirectToAction("Index"); }
在你的WebApiConfig中的Register方法中,你需要做如下更改:
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
这里的routeTemplate中添加了`{action}`参数。只需要记住,你新路由的"name"属性必须是唯一的。通常"DefaultApi"已经被定义了。
这个问题出现的原因是因为在WebApiConfig中的Register方法中,路由模板中没有包含`{action}`参数,而你的控制器中的某个方法的参数列表中包含了一个名为'id'的非空类型`System.Int32`的参数。由于路由模板中没有定义`{action}`参数,导致在解析路由时,无法将请求的URL中的参数映射到控制器方法的参数列表中,从而引发了这个错误。
为了解决这个问题,需要在路由模板中添加`{action}`参数,并确保控制器方法的参数列表中不包含名为'id'的非空类型`System.Int32`的参数。这样,请求的URL中的参数就能正确地映射到控制器方法的参数列表中,避免了这个错误的发生。
在上述内容中,出现了一个问题:参数字典包含一个空条目,该条目是一个非空类型的int型参数'id'。下面整理出了这个问题出现的原因以及解决方法。
问题原因:
问题出现的原因是在URL中缺少了一个'id'参数。在URL中期望传入一个'id'参数,但实际上没有传入任何值。
解决方法:
要解决这个问题,需要确保在URL中提供正确的参数。例如,在URL中添加正确的'id'参数,如下所示:
http://yoursite.com/controller/edit/12
此外,还有一个关于发送datetime变量的解决方法。如果发送的datetime变量没有以正确的格式发送,后端将无法识别该字段作为有效参数,并且会出现相同的错误。可以通过将datetime变量发送为字符串,并在后端解析为datetime类型来解决这个问题。
另外还有一个用户提到的解决方法,即将基本数据类型传递给Post服务时,参数必须以?id=12这样的形式出现在URL中。
有用户提到他正在使用MVC Grid,并且对于传递给编辑操作结果的值没有控制权。参数是自动生成的路由值。但这并不影响问题的解决方法。
虽然这个问题的提问已经超过6年,但是仍然适用于现在。在解决问题的过程中,需要确保在URL中正确提供所需的参数。
本文讨论了一个问题,即参数字典包含一个空条目的问题。通过整理上述内容,我们了解了这个问题的原因以及解决方法。为了解决这个问题,需要在URL中正确提供所需的参数,并确保发送的数据类型以及格式都是正确的。