przy użyciu: MVC 4, ASP.NET Razor
Otrzymuję błąd, który wygląda na to, że nie powinno to być możliwe. Mówi mi, że używam odniesienia zerowego, States, ale wyraźnie jest ono ustawiane.
Kontroler:
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();
}
Widok:
<div class="search-input">
<select>
@foreach (KeyValuePair<int, string> de in ViewBag.States)
{
<option value="@de.Key">@de.Value</option>
}
</select>
</div>
Błąd:
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
źródło
źródło
Index()
metodzie i widoku i zobacz, czy to pomoże Ci zobaczyć, co jest nie tak.Odpowiedzi:
Znalezione rozwiązanie: miałem w widoku literówkę, ViewBag.Typo <- to spowodowało błąd, ale debugger umieścił wyjątek w nieistotnym miejscu.
źródło
Ten błąd występuje, gdy masz ViewBag Non-Existent w kodzie maszynki do golenia wywołującym metodę.
Kontroler
public ActionResult Accept(int id) { return View(); }
brzytwa:
<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>
Z jakiegoś powodu .net nie jest w stanie pokazać błędu w prawidłowym wierszu.
Zwykle powoduje to dużo straconego czasu.
źródło
Ten wyjątek jest również generowany, gdy nieistniejąca właściwość jest aktualizowana dynamicznie przy użyciu odbicia.
Jeśli używa się odbicia do dynamicznego aktualizowania wartości właściwości, warto sprawdzić, czy przekazana wartość
PropertyName
jest identyczna z rzeczywistą właściwością.W moim przypadku próbowałem zaktualizować
Employee.firstName
, ale w rzeczywistości właściwość byłaEmployee.FirstName
.Warto o tym pamiętać. :)
źródło
Moim rozwiązaniem tego błędu było skopiowanie i wklejenie z innego projektu, który miał odniesienie do
@Model.Id
. Ta konkretna strona nie miała modelu, ale linia błędu była tak daleko od rzeczywistego błędu, że nigdy jej nie znalazłem!źródło
Musisz zdefiniować stany różne od null.
@if (ViewBag.States!= null) { @foreach (KeyValuePair<int, string> de in ViewBag.States) { value="@de.Key">@de.Value } }
źródło
Zestaw
Dictionary<int, string> states = new Dictionary<int, string>()
jako właściwość poza funkcją i wewnątrz funkcji wstaw wpisy, powinno działać.
źródło