sintaxis mvc cshtml code c# asp.net asp.net-mvc razor

c# - mvc - razor reference



No se puede realizar el enlace de tiempo de ejecuciĆ³n en una referencia nula, pero NO es una referencia nula (6)

utilizando: MVC 4, ASP.NET Razor

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

Controlador:

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

La vista:

<div class="search-input"> <select> @foreach (KeyValuePair<int, string> de in ViewBag.States) { <option value="@de.Key">@de.Value</option> } </select> </div>

El error:

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


Conjunto

Dictionary<int, string> states = new Dictionary<int, string>()

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


Debe definir estados que no sean nulos ...

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


Esta excepción también se produce cuando una propiedad inexistente se actualiza dinámicamente, utilizando la reflexión.

Si uno está utilizando el reflejo para actualizar dinámicamente los valores de propiedad, vale la pena verificar para asegurarse de que PropertyName pasado es 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 llamando a un método.

Controlador

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

maquinilla de afeitar:

<div class="form-group"> @Html.LabelFor(model => model.ToId, "To", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.Flag(Model.from) </div> </div> <div class="form-group"> <div class="col-md-10"> <input value="@ViewBag.MaximounAmount.ToString()" />@* HERE is the error *@ </div> </div>

Por algún motivo, .net no puede mostrar el error en la línea correcta. Normalmente esto causa un montón de tiempo perdido.


Mi solución a este error fue copiar y pegar desde 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 nunca la encontré.


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.