参数字典中包含一个空条目,用于非可空类型'System.Int32'的参数'id'。

11 浏览
0 Comments

参数字典中包含一个空条目,用于非可空类型'System.Int32'的参数'id'。

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

  1. Id → 主键
  2. Username
  3. 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");                  
}

0
0 Comments

在你的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中的参数就能正确地映射到控制器方法的参数列表中,避免了这个错误的发生。

0
0 Comments

这个错误表示MVC框架找不到你传递给Edit方法的id属性的值。MVC在路由数据、查询字符串和表单值等位置搜索这些值。

例如,以下代码会将id属性作为查询字符串传递:

/Edit?id=1

一个更好的方法是编辑你的路由配置,这样你可以将这个值作为URL的一部分传递:

/Edit/1

这个过程,MVC在参数中搜索值的过程被称为模型绑定,它是MVC最好的特性之一。你可以在这里找到更多关于模型绑定的信息。

问题的解决方法是确保在调用Edit方法时正确传递id属性的值。你可以通过修改路由配置、查询字符串或表单值来传递这个值。确保传递的值在Edit方法中被正确接收和处理。

0
0 Comments

在上述内容中,出现了一个问题:参数字典包含一个空条目,该条目是一个非空类型的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中正确提供所需的参数,并确保发送的数据类型以及格式都是正确的。

0