无法对空引用执行运行时绑定,但它不是空引用

gen*_*der 67 c# asp.net asp.net-mvc razor

使用:MVC 4,ASP.NET Razor

我收到的错误看起来应该是不可能的.它告诉我,我正在使用空引用,状态,但很明显它正在被设置.

控制器:

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();
}
Run Code Online (Sandbox Code Playgroud)

风景:

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

错误:

Cannot perform runtime binding on a null reference
Line 54: @foreach (KeyValuePair<int, string> de in ViewBag.States)
Run Code Online (Sandbox Code Playgroud)

gen*_*der 92

找到解决方案:我的视图中有拼写错误,ViewBag.Typo < - 这导致错误,但调试器将异常置于不相关的位置.

  • 只是遇到了调试器将异常置于视图中错误位置的问题.我进一步向下引用了空引用. (10认同)
  • 等等 - 错字是什么? (8认同)
  • 非常烦人的特质.我的意思是真的,调试器,如果你不知道问题是什么或在哪里,当你假装你的时候它实际上会让事情变得更好. (5认同)
  • Arggggg!刚刚花了一个小时!有一个部分视图被使用了一些差异...模型生成的确切相同,但是当从一个actionresult而不是另一个引用时出错.结束了ViewBag问题.它被设置在一个动作而不是另一个动作中.令人沮丧! (2认同)

AFe*_*ter 13

当您的剃刀代码中调用方法时ViewBag不存在时,会发生此错误.

调节器

public ActionResult Accept(int id)
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

剃刀:

<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>
Run Code Online (Sandbox Code Playgroud)

由于某种原因,.net无法在正确的行中显示错误.通常这会浪费很多时间.


Xtr*_*ity 12

使用反射动态更新不存在的属性时,也会抛出此异常.

如果使用反射来动态更新属性值,则值得检查以确保传递PropertyName与实际属性相同.

在我的情况下,我试图更新Employee.firstName,但实际上属性Employee.FirstName.

值得记住.:)


Eon*_*dan 5

我对此错误的解决方案是从另一个引用的项目中复制并粘贴@Model.Id.这种特殊页面没有一个模型,但错误行是如此遥远,从实际的错误,我从来没有关于发现它!


小智 -4

 Dictionary<int, string> states = new Dictionary<int, string>()
Run Code Online (Sandbox Code Playgroud)

作为函数外部的属性并在函数内部插入条目,它应该可以工作。

  • 使用集合初始值设定项绝对没有任何问题。这并不能解决问题。 (2认同)