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 clairement défini.
Manette:
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 vue:
<div class="search-input">
<select>
@foreach (KeyValuePair<int, string> de in ViewBag.States)
{
<option value="@de.Key">@de.Value</option>
}
</select>
</div>
L'erreur:
Cannot perform runtime binding on a null reference
Line 54: @foreach (KeyValuePair<int, string> de in ViewBag.States)
Solution trouvée: à mon avis, j'avais une faute de frappe, ViewBag.Typo <- cela était à l'origine de 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 dynamique, à l'aide de la réflexion.
Si l'on utilise la réflexion pour mettre à jour de manière dynamique les valeurs de propriété, il convient de vérifier que le PropertyName
transmis est identique à la propriété réelle.
Dans mon cas, j'essayais de mettre à jour Employee.firstName
, mais la propriété était en fait Employee.FirstName
.
Cela vaut la peine de garder à l'esprit. :)
Cette erreur se produit lorsque vous avez un ViewBag non existant dans votre code de rasoir appelant une méthode.
contrôleur
public ActionResult Accept(int id)
{
return View();
}
rasoir:
<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>
Pour une raison quelconque, le .net ne peut pas afficher l'erreur dans la ligne correcte. Normalement, cela cause beaucoup de temps perdu.
Ma solution à cette erreur a consisté à copier et coller d'un autre projet faisant référence à @Model.Id
. n'avait pas de modèle dans cette page, mais la ligne d'erreur était si éloignée de l'erreur réelle que je n'ai jamais trouvée!
Vous devez définir des états différents de null.
@if (ViewBag.States!= null)
{
@foreach (KeyValuePair<int, string> de in ViewBag.States)
{
value="@de.Key">@de.Value
}
}