0

コントローラに次のコードがあります。

 ViewBag.CategoryName = new SelectList(catList, "key", "value");

ここで、catListは、keyがstring型で、valueがstring型の辞書です。このディクショナリは適切に入力され、実際の値が含まれています(確認およびテスト済み)。

私の見解では、次のコード行があります。

 @Html.DropDownListFor(model => model.CategoryName, (SelectList)ViewBag.CategoryName)

しかし、何らかの理由でページを実行すると、モデルのカテゴリ名の実際の値がドロップダウンリストで選択されません。ここで何が問題なのか誰か教えてもらえますか?私のモデルには間違いなくカテゴリ名があり、その名前はドロップダウンリストの値のリストに含まれています。キャラクターのケースは同じです...

4

1 に答える 1

0

どうやらここでの問題は、ViewBagオブジェクトの名前をモデルプロパティの名前と同じにすることはできないということです。私の場合、プロパティとViewbagインスタンスの両方にCategoryNameという名前を付けました。コードを次のように変更すると:

 ViewBag.Categories = new SelectList(catList, "key", "value");

 @Html.DropDownListFor(model => model.CategoryName, (SelectList)ViewBag.Categories)

それはうまく機能します。これがなぜなのか正確にはわかりません。おそらくモデルバインディングディクショナリと関係がありますが、これが確かな理由です。ここでカーテンの後ろで実際に何が起こっているのか、そしてなぜこれが問題になるのかを誰かが説明できますか?

于 2013-01-09T15:46:55.090 に答える