使用: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)
見つかった解決策:ViewBag.Typoの表示に誤字がありました<-これによりエラーが発生しましたが、デバッガーは無関係な場所に例外を配置しました。
この例外は、存在しないプロパティがリフレクションを使用して動的に更新されている場合にもスローされます。
リフレクションを使用してプロパティ値を動的に更新する場合、渡されたPropertyName
が実際のプロパティと同一であることを確認する価値があります。
私の場合、Employee.firstName
を更新しようとしましたが、プロパティは実際にはEmployee.FirstName
でした。
念頭に置いて価値があります。 :)
このエラーは、メソッドを呼び出すカミソリコードに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は正しい行にエラーを表示できません。通常、これは多くの時間を無駄にします。
このエラーに対する私の解決策は、@Model.Id
への参照を持つ別のプロジェクトからコピーアンドペーストすることでした。この特定のページはhaveモデルではありませんでしたが、エラー行は実際のエラーとはかけ離れていました。
Nullに等しくない状態を定義する必要があります。
@if (ViewBag.States!= null)
{
@foreach (KeyValuePair<int, string> de in ViewBag.States)
{
value="@de.Key">@de.Value
}
}