Verwenden von: MVC 4, ASP.NET Razor
Ich erhalte eine Fehlermeldung, die anscheinend nicht möglich sein sollte. Es sagt mir, dass ich eine Nullreferenz verwende, States, aber es wird eindeutig gesetzt.
Regler:
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();
}
Die Aussicht:
<div class="search-input">
<select>
@foreach (KeyValuePair<int, string> de in ViewBag.States)
{
<option value="@de.Key">@de.Value</option>
}
</select>
</div>
Der Fehler:
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
Generalcoder
quelle
quelle
Index()
Methode und die Ansicht ein und prüfen Sie, ob Sie dadurch besser erkennen können, was falsch ist.Antworten:
Gefundene Lösung: Ich hatte Tippfehler in meiner Ansicht, ViewBag.Typo <- dies verursachte den Fehler, aber der Debugger platzierte die Ausnahme an einer irrelevanten Stelle.
quelle
Dieser Fehler tritt auf, wenn in Ihrem Rasiermessercode ein ViewBag nicht vorhanden ist , der eine Methode aufruft.
Regler
public ActionResult Accept(int id) { return View(); }
Rasierer:
<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>
Aus irgendeinem Grund kann das .net den Fehler nicht in der richtigen Zeile anzeigen.
Normalerweise verursacht dies viel Zeitverschwendung.
quelle
Diese Ausnahme wird auch ausgelöst, wenn eine nicht vorhandene Eigenschaft mithilfe von Reflection dynamisch aktualisiert wird.
Wenn Sie Reflection verwenden, um Eigenschaftswerte dynamisch zu aktualisieren, sollten Sie überprüfen, ob die übergebene
PropertyName
Eigenschaft mit der tatsächlichen Eigenschaft identisch ist.In meinem Fall habe ich versucht, ein Update durchzuführen
Employee.firstName
, aber die Eigenschaft war tatsächlichEmployee.FirstName
.Es lohnt sich, daran zu denken. :) :)
quelle
Meine Lösung für diesen Fehler war das Kopieren und Einfügen aus einem anderen Projekt, auf das verwiesen wurde
@Model.Id
. Diese besondere Seite nicht hat ein Modell , aber die Fehlerzeile aus mir von den tatsächlichen Fehlern so weit war es nie gefunden!quelle
Sie müssen Zustände definieren, die nicht gleich null sind.
@if (ViewBag.States!= null) { @foreach (KeyValuePair<int, string> de in ViewBag.States) { value="@de.Key">@de.Value } }
quelle
einstellen
Dictionary<int, string> states = new Dictionary<int, string>()
Als Eigenschaft außerhalb der Funktion und innerhalb der Funktion sollten die Einträge eingefügt werden.
quelle