Подтвердить что ты не робот

Невозможно выполнить привязку времени выполнения по нулевой ссылке, но это НЕ нулевая ссылка

с использованием: MVC 4, ASP.NET Razor

Я получаю сообщение об ошибке, похожее на то, что это невозможно. Он говорит мне, что я использую null-reference, States, но, очевидно, он устанавливается.

Контроллер:

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();
}

Вид:

<div class="search-input">
    <select>
        @foreach (KeyValuePair<int, string> de in ViewBag.States)
        {
            <option value="@de.Key">@de.Value</option>
        }
    </select>
</div>

Ошибка:

Cannot perform runtime binding on a null reference
Line 54: @foreach (KeyValuePair<int, string> de in ViewBag.States)
4b9b3361

Ответ 1

Найдено решение: у меня была опечатка, ViewBag.Typo < - это вызвало ошибку, но отладчик разместил исключение в нерелевантном месте.

Ответ 2

Это исключение также генерируется при динамическом обновлении несуществующего свойства с использованием отражения.

Если для динамического обновления значений свойств используется рефлексия, стоит проверить, чтобы прошедший PropertyName был идентичен фактическому свойству.

В моем случае я пытался обновить Employee.firstName, но на самом деле это свойство было Employee.firstName.

Стоит иметь в виду.:)

Ответ 3

Эта ошибка возникает, когда в вашем коде бритвы вызывается метод ViewBag, который вызывает метод.

контроллер

public ActionResult Accept(int id)
{
    return View();
}

Бритва:

<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>

По какой-то причине .net не могут показать ошибку в правильной строке. Обычно это вызывает много времени.

Ответ 4

Мое решение этой ошибки состояло в том, что копия и вставка из другого проекта, имеющего ссылку на @Model.Id. Эта страница не имела модель, но строка ошибки была настолько далека от фактической ошибки, о которой я никогда не узнал!

Ответ 5

Вы должны определить состояния, не равные нулю.

@if (ViewBag.States!= null)
{
    @foreach (KeyValuePair<int, string> de in ViewBag.States)
    {
        value="@de.Key">@de.Value 
    }
}                                

Ответ 6

Установите

 Dictionary<int, string> states = new Dictionary<int, string>()

как свойство вне функции и внутри функции вставлять записи, он должен работать.