web-dev-qa-db-fra.com

Le dictionnaire de paramètres contient une entrée NULL pour le paramètre 'id' de type non nullable 'System.Int32'

Je construis ma première application MVC, j'ai une table dans la base de données contenant 3 colonnes:

  1. Id → clé primaire
  2. Username
  3. mot de passe

Lorsque je clique sur le lien modifier, modifie un enregistrement, exception suivante:

Le dictionnaire de paramètres contient une entrée NULL pour le paramètre 'id' de type 'System.Int32' non nul pour la méthode 'System.Web.Mvc.ActionResult Edit (Int32)' dans 'MvcApplication1.Controllers.UserController'. Un paramètre facultatif doit être un type de référence, un type nullable ou être déclaré en tant que paramètre facultatif . Nom du paramètre: paramètres

Voici mon code d'édition:

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");                  
}
17
user2546623

Vous attendez un paramètre id dans votre URL mais vous n'en fournissez pas. Tel que:

http://yoursite.com/controller/edit/12
                                    ^^ missing
30
Simon Whitehead

dans votre WebApiConfig >> Register ()Vous devez passer à

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

Ici, la routeTemplate est ajoutée avec {action}

12
Ramkumar Thangavel

Cette erreur signifie que l'infrastructure MVC ne peut pas trouver de valeur pour votre propriété id que vous transmettez en tant qu'argument à la méthode Edit.

MVC recherche ces valeurs à des emplacements tels que les données de votre itinéraire, la chaîne de requête et les valeurs de formulaire. 

Par exemple, ce qui suit passera la propriété id dans votre chaîne de requête:

/Edit?id=1

Une façon plus agréable serait d’éditer votre configuration de routage afin que vous puissiez passer cette valeur dans l’URL elle-même:

/Edit/1

Ce processus où MVC recherche des valeurs pour vos paramètres s'appelle Model Binding et constitue l'une des meilleures fonctionnalités de MVC. Vous pouvez trouver plus d’informations sur Model Binding ici .

8
Wouter de Kort

La méthode d'action sur votre formulaire pointe-t-elle sur /controller/edit/1?

Essayez d’utiliser l’un de ceux-ci:

// 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 })

Ou à l'intérieur de votre formulaire, ajoutez un champ "Id" masqué

@Html.HiddenFor(m => m.Id)
4
Andrew Backer

Vous obtenez cette erreur car ASP.NET MVC ne peut pas trouver une valeur de paramètre id à fournir pour le paramètre id de votre méthode d'action. 

Vous devez soit passer cela dans l'URL ("/ Home/Edit/123"), en tant que paramètre de chaîne de requête ("/ Home/Edit? Id = 123") ou en tant que paramètre POSTed quelque chose comme <input type="hidden" name="id" value="123" /> dans votre formulaire HTML). 

Vous pouvez également définir le paramètre id comme un int nullable (Edit(int? id, User collection) {...}), mais si l'id était null, vous ne sauriez pas quoi éditer.

2
Rune

J'ai eu la même erreur, mais pour moi, le problème était que je faisais la demande avec un mauvais GUID. J'ai raté les 2 derniers personnages.

360476f3-a4c8-4e1c-96d7-3c451c6c86
360476f3-a4c8-4e1c-96d7-3c451c6c865e
0
Alin Ciocan

Il suffit de changer votre ligne de code pour

<a href="~/Required/[email protected]">Edit</a>

à partir de l'endroit où vous appelez cette fonction qui transmettra l'identifiant corect

0
Aneeq Azam Khan

Juste au cas où cela aiderait quelqu'un d'autre; cette erreur peut se produire dans Visual Studio si vous avez une vue en tant qu'onglet ouvert et que cet onglet dépend d'un paramètre.

Fermez la vue actuelle et démarrez votre application. L'application démarrera normalement. si vous avez une vue ouverte, Visual Studio interprète cela comme vous voulez exécuter la vue actuelle. 

0
Corby

Ajoutez simplement un routage d'attribut s'il n'est pas présent dans appconfig ou webconfig 

config.MapHttpAttributeRoutes()
0
anirudh talluri