2022年9月12日月曜日

ASP.NET MVC "Cannot perform runtime binding on a null reference"

これは初見の人にとっては厄介な問題です。

 
[RuntimeBinderException: Cannot perform runtime binding on a null reference]
   CallSite.Target(Closure , CallSite , Object ) +148
   System.Dynamic.UpdateDelegates.UpdateAndExecute1(CallSite site, T0 arg0) +664 
   ...
 
初見の人にとって厄介な理由は、修正すべき場所とは異なる場所が指摘されるからです。
 
この例については…
luckyNumber はきちんと初期化しています。
luckyNumber に問題が無い事は明らかです。
 
 
未初期化のフィールドへアクセスしていないかどうかを確認しましょう。
 
この場合は @Model へのアクセスが問題です。
@Model を一切初期化していないのにも関わらず、
@Model へアクセスしようとしています。
 

@Model については @model 宣言をしない場合 dynamic 型として解決されるようです。
dynamic 型は実行時に解決されます。
実行するまでエラーが発生しないため、見過ごしてしまう事が懸念されます。

他のソースコードから input タグ等をコピーしてきた場合に起こり得ます。
@Model は存在しないので value 属性ごと削除しても良いでしょう。