No se puede realizar el enlace de tiempo de ejecución en una referencia nula, pero NO es una referencia nula

utilizando: MVC 4, ASP.NET Razor

Recibo un error que parece que no debería ser posible. Me dice que estoy usando una referencia nula, Estados, pero claramente se está configurando.

Controlador:

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 vista:

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

El error:

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

Solución encontrada: tuve un error tipográfico en mi vista, ViewBag.Typo <: esto causó el error, pero el depurador colocó la excepción en un lugar irrelevante.

Esta excepción también se lanza cuando una propiedad no existente se actualiza dinámicamente, utilizando la reflexión.

Si uno está utilizando la reflexión para actualizar dinámicamente los valores de las propiedades, vale la pena revisar para asegurarse de que el PropertyName pasado sea idéntico a la propiedad real.

En mi caso, estaba intentando actualizar Employee.firstName , pero la propiedad era en realidad Employee.FirstName .

Vale la pena tener en cuenta. 🙂

Este error ocurre cuando tiene un ViewBag inexistente en su código de afeitar que llama a un método.

Controlador

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

maquinilla de afeitar:

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

Por alguna razón, .net no puede mostrar el error en la línea correcta. Normalmente esto causa mucho tiempo perdido.

Mi solución a este error fue copiar y pegar de otro proyecto que tenía una referencia a @Model.Id . Esta página en particular no tenía un modelo, ¡pero la línea de error estaba tan lejos del error real que casi nunca la encontré!

Debe definir estados no iguales a nulos ..

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

Conjunto

  Dictionary states = new Dictionary() 

Como una propiedad fuera de la función y dentro de la función, inserte las entradas, debería funcionar.