0

これらの値を投稿するフォームがあります:

調査[0].キー75

調査[0].値 4

アンケート[1].Key 76

調査[1].値4

デフォルトのモデル バインダーを使用して Dictionary 型にマップしようとしています。

[HttpPost]
public ActionResult CompleteSurvey(Dictionary<int, int> answers)
{
...
}

しかし、InvalidCastException: 指定されたキャストが無効です。

どうして??

4

2 に答える 2

1

私はここで推測していますが、それはあなたの議論が「調査」ではなく「回答」と呼ばれているからだと思います。firebug または chrome で簡単にできる投稿ヘッダーを調べて、メソッドに投稿されているものを確認する必要があります。「有線」で送信されているものを調べると、より理にかなっています

キャストが有効でないのは、おそらく、モデル バインダーがその仕事をしたいときにシナリオの回答が null であるためです。ディクショナリの代わりにフォームコレクションを使用した場合、投稿したものはすべてそこにあることがわかります。

于 2012-10-22T19:04:17.193 に答える
0

"survey" を削除し、反復を単独で残したとき (つまり [0].Key) バインディングが正常に動作する奇妙な理由がありました。

私はこの記事に私の知識を基にしていました: http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx これは間違っているようです??? それともMVCの以前のバージョンを参照していますか???

于 2012-10-21T23:23:26.860 に答える