web-dev-qa-db-ja.com

null参照に対して実行時バインディングを実行できませんが、null参照ではありません

使用:MVC 4、ASP.NET Razor

それは不可能なはずのエラーが表示されます。それは私がnull参照、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)
66
generalcoder

見つかった解決策:ViewBag.Typoの表示に誤字がありました<-これによりエラーが発生しましたが、デバッガーは無関係な場所に例外を配置しました。

90
generalcoder

この例外は、存在しないプロパティがリフレクションを使用して動的に更新されている場合にもスローされます。

リフレクションを使用してプロパティ値を動的に更新する場合、渡されたPropertyNameが実際のプロパティと同一であることを確認する価値があります。

私の場合、Employee.firstNameを更新しようとしましたが、プロパティは実際にはEmployee.FirstNameでした。

念頭に置いて価値があります。 :)

12
XtraSimplicity

このエラーは、メソッドを呼び出すカミソリコードに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は正しい行にエラーを表示できません。通常、これは多くの時間を無駄にします。

12
AFetter

このエラーに対する私の解決策は、@Model.Idへの参照を持つ別のプロジェクトからコピーアンドペーストすることでした。この特定のページはhaveモデルではありませんでしたが、エラー行は実際のエラーとはかけ離れていました。

5
Eonasdan

Nullに等しくない状態を定義する必要があります。

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