Impossible d’effectuer une liaison à l’exécution sur une référence null, mais ce n’est PAS une référence null

en utilisant: MVC 4, ASP.NET Razor

Je reçois une erreur qui semble ne pas être possible. Il me dit que j’utilise une référence nulle, States, mais il est clair qu’il est en cours de définition.

Manette:

public ActionResult Index() { Dictionary states = new Dictionary() { { -1, "a"}, { 0, "b"}, { 1, "c"}, { 2, "d"}, }; //assigning states ViewBag.States = states; foreach (KeyValuePair de in ViewBag.States) { Debug.WriteLine(de.Key); } return View(); } 

La vue:

 
@foreach (KeyValuePair de in ViewBag.States) { @de.Value }

L’erreur:

 Cannot perform runtime binding on a null reference Line 54: @foreach (KeyValuePair de in ViewBag.States) 

Solution trouvée: J’avais une faute de frappe à mon avis, ViewBag.Typo <- cela provoquait l'erreur, mais le débogueur a placé l'exception à un endroit non pertinent.

Cette exception est également levée lorsqu’une propriété inexistante est mise à jour de manière dynamic, en utilisant la reflection.

Si l’on utilise la reflection pour mettre à jour dynamicment les valeurs de propriété, il est utile de vérifier que le PropertyName transmis est identique à la propriété réelle.

Dans mon cas, je tentais de mettre à jour Employee.firstName , mais la propriété était en fait Employee.FirstName .

Garder à l’esprit 🙂

Cette erreur se produit lorsque vous avez un ViewBag inexistant dans votre code de razor appelant une méthode.

Manette

 public ActionResult Accept(int id) { return View(); } 

le razor:

 
@Html.LabelFor(model => model.ToId, "To", htmlAtsortingbutes: new { @class = "control-label col-md-2" })
@Html.Flag(Model.from)
@* HERE is the error *@

Pour une raison quelconque, le .net ne peut pas afficher l’erreur dans la ligne correcte. Normalement, cela occasionne beaucoup de temps perdu.

Ma solution à cette erreur était celle d’un copier-coller d’un autre projet ayant une référence à @Model.Id . Cette page particulière n’avait pas de modèle mais la ligne d’erreur était si éloignée de l’erreur réelle que je n’en avais jamais trouvée!

Vous devez définir des états différents de null.

 @if (ViewBag.States!= null) { @foreach (KeyValuePair de in ViewBag.States) { value="@de.Key">@de.Value } } 

Ensemble

  Dictionary states = new Dictionary() 

En tant que propriété en dehors de la fonction et à l’intérieur de la fonction, insérez les entrées, cela devrait fonctionner.