El diccionario de parámetros contiene una entrada nula para el parámetro 'id' de tipo no anulable 'System.Int32'

Resuelto asked hace 11 años • 17 respuestas

Estoy creando mi primera aplicación MVC. Tengo una tabla en la base de datos que contiene 3 columnas:

  1. Identificación → clave principal
  2. Nombre de usuario
  3. contraseña

Cuando hago clic en editar enlace para editar un registro, se genera la siguiente excepción:

El diccionario de parámetros contiene una entrada nula para el parámetro 'id' de tipo no anulable 'System.Int32' para el método 'System.Web.Mvc.ActionResult Edit(Int32)' en 'MvcApplication1.Controllers.UserController'. Un parámetro opcional debe ser un tipo de referencia, un tipo que acepte valores NULL o declararse como parámetro opcional. Nombre del parámetro: parámetros

Aquí está mi código de edición:

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");                  
}
 avatar Aug 05 '13 14:08
Aceptado

Espera un idparámetro en su URL pero no lo proporciona. Como:

http://yoursite.com/controller/edit/12
                                    ^^ missing
Simon Whitehead avatar Aug 05 '2013 07:08 Simon Whitehead

en tu WebApiConfig>> Register () Tienes que cambiar a

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }

Aquí el routeTemplate, se agrega con{action}

Ramkumar Thangavel avatar Jan 09 '2015 08:01 Ramkumar Thangavel

Este error significa que el marco MVC no puede encontrar un valor para su idpropiedad que pase como argumento al Editmétodo.

MVC busca estos valores en lugares como los datos de su ruta, la cadena de consulta y los valores del formulario.

Por ejemplo, lo siguiente pasará la idpropiedad en su cadena de consulta:

/Edit?id=1

Una mejor manera sería editar su configuración de enrutamiento para que pueda pasar este valor como parte de la propia URL:

/Edit/1

Este proceso en el que MVC busca valores para sus parámetros se llama Enlace de modelo y es una de las mejores características de MVC. Puede encontrar más información sobre el enlace de modelos aquí .

Wouter de Kort avatar Aug 05 '2013 07:08 Wouter de Kort

¿El método de acción en su formulario apunta a /controller/edit/1?

Intente usar uno de estos:

// the null in the last position is the html attributes, which you usually won't use
// on a form.  These invocations are kinda ugly
Html.BeginForm("Edit", "User", new { Id = Model.Id }, FormMethod.Post, null)

Html.BeginForm(new { action="Edit", controller="User", id = Model.Id })

O dentro de su formulario agregue un campo "Id" oculto

@Html.HiddenFor(m => m.Id)
Andrew avatar Aug 05 '2013 07:08 Andrew