定義が次のように見えるコントローラーアクションがあります-
public ActionResult ChangeModel( IEnumerable<MyModel> info, long? destinationId)
そしてモデル:
public class MyModel
{
public string Name; //Gets populated by default binder
public long? SourceId; //remains null though the value is set when invoked
}
'Name'プロパティはコントローラーアクションに入力されますが、SourceIdプロパティはnullのままです。長いdestinationId ? _ パラメータも入力されます。
MVC(バージョン2)ソースコードをステップ実行している間、これはDefaultModelBinderによってスローされる例外です。
タイプ'System.Int32'からタイプ'System.Nullable`1[[System.Int64、mscorlib、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089]]'へのパラメーター変換が失敗しました。これは、タイプコンバーターが変換できないためです。これらのタイプ。
モデルがlong?ではなくlongに変更された場合、デフォルトのモデルバインダーが値を設定します。
public class MyModel
{
public string Name {get;set;}; //Gets populated by default binder
public long SourceId {get;set;}; //No longer long?, so value gets set
}
これは既知の問題ですか?MVCソースコードが最適化されているため、ほとんどのコードをステップスルーできません。
更新:送信されるリクエストは、Jsonを使用したHttp POSTであり、ソースJSonは次のようになります-
{"info":[{"Name":"CL1","SourceId":2}], "destinationId":"1"}