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.