83

使用: MVC 4、ASP.NET Razor

ありえないようなエラーが表示されます。null 参照の状態を使用していることがわかりますが、明らかに設定されています。

コントローラ:

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

6 に答える 6

111

見つかった解決策: ViewBag.Typo <-- これが原因でエラーが発生しましたが、デバッガーは無関係な場所に例外を配置しました。

于 2013-10-18T20:01:08.667 に答える
19

このエラーは、メソッドを呼び出すカミソリ コードにViewBag Non-Existentがある場合に発生します。

コントローラ

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 は正しい行にエラーを表示できません。

通常、これは多くの無駄な時間を引き起こします。

于 2016-03-20T02:57:46.650 に答える
14

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

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

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

覚えておく価値があります。:)

于 2015-01-05T21:17:57.783 に答える
5

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

于 2016-12-13T02:43:27.827 に答える
-4

設定

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

関数の外側と関数の内側にエントリを挿入するプロパティとして、それは機能するはずです。

于 2013-10-18T19:46:37.590 に答える