usando: MVC 4, ASP.NET Razor
Recibo un error que parece que no debería ser posible. Me dice que estoy usando una referencia nula, States, pero claramente se está configurando.
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)
c#
asp.net
asp.net-mvc
razor
codificador general
fuente
fuente
Index()
método y la vista, y vea si eso le ayuda a ver qué está mal.Respuestas:
Solución encontrada: tenía un error tipográfico en mi opinión, ViewBag.Typo <- esto causó el error, pero el depurador colocó la excepción en un lugar irrelevante.
fuente
Este error ocurre cuando se 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 alguna razón, .net no puede mostrar el error en la línea correcta.
Normalmente, esto provoca una gran pérdida de tiempo.
fuente
Esta excepción también se produce cuando una propiedad inexistente se actualiza dinámicamente mediante la reflexión.
Si uno está usando la reflexión para actualizar dinámicamente los valores de las propiedades, vale la pena verificar para asegurarse de que el
PropertyName
que la propiedad sea idéntica a la real.En mi caso, estaba intentando actualizar
Employee.firstName
, pero la propiedad realmente eraEmployee.FirstName
.Vale la pena tenerlo en cuenta. :)
fuente
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é.fuente
Debe definir estados que no sean iguales a nulo.
@if (ViewBag.States!= null) { @foreach (KeyValuePair<int, string> de in ViewBag.States) { value="@de.Key">@de.Value } }
fuente
Conjunto
Dictionary<int, string> states = new Dictionary<int, string>()
como una propiedad fuera de la función y dentro de la función inserte las entradas, debería funcionar.
fuente