El diccionario de parámetros contiene una entrada nula para el parámetro 'id' de tipo no anulable 'System.Int32'
Estoy creando mi primera aplicación MVC. Tengo una tabla en la base de datos que contiene 3 columnas:
- Identificación → clave principal
- Nombre de usuario
- 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");
}
Espera un id
parámetro en su URL pero no lo proporciona. Como:
http://yoursite.com/controller/edit/12
^^ missing
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}
Este error significa que el marco MVC no puede encontrar un valor para su id
propiedad que pase como argumento al Edit
mé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 id
propiedad 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í .
¿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)