参数字典包含非可空类型'System.Int32'的参数'id'的空条目

24 c# asp.net-mvc

我正在构建我的第一个MVC应用程序,我在数据库中有一个包含3列的表:

  1. Id→主键
  2. 用户名
  3. 密码

当我点击编辑链接编辑一条记录时,它抛出以下异常:

参数字典包含非可空类型'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");                  
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*ead 36

您期望idURL中的参数,但您没有提供参数.如:

http://yoursite.com/controller/edit/12
                                    ^^ missing
Run Code Online (Sandbox Code Playgroud)

  • 只是一个FYI我知道它不是相同的情况但是有相同的错误所以,当发送一个datetime变量时,一定要把它放在正确的格式,如果不是BE(后端)将不会将该字段识别为有效参数,并会给你相同的错误.(我解决了它发送日期时间变量作为字符串并将其解析为BE中的日期时间) (2认同)

小智 13

在你的 WebApiConfig>> Register () 你必须改为

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
Run Code Online (Sandbox Code Playgroud)

这里routeTemplate添加了{action}


Wou*_*ort 9

此错误意味着MVC框架无法为您id作为参数传递给该Edit方法的属性找到值.

MVC在路由数据,查询字符串和表单值等位置搜索这些值.

例如,以下内容将id在您的查询字符串中传递该属性:

/Edit?id=1
Run Code Online (Sandbox Code Playgroud)

一种更好的方法是编辑路由配置,以便您可以将此值作为URL本身的一部分传递:

/Edit/1
Run Code Online (Sandbox Code Playgroud)

MVC搜索参数值的过程称为模型绑定,它是MVC的最佳功能之一.您可以在此处找到有关模型绑定的更多信息.