DropDownListFor(ASP.NET MVC3リリース)で異常な動作が検出されました。ドロップダウンでModelプロパティ値の代わりにViewBagプロパティ値を選択します。Modelプロパティ値の代わりにDropDownListForのViewBagプロパティ値
モデル:
public class Country {
public string Name { get; set; }
}
public class User {
public Country Country { get; set; }
}
コントローラーインデックスアクション:
ViewBag.CountryList = new List<Country> { /* Dropdown collection */
new Country() { Name = "Danmark" },
new Country() { Name = "Russia" } };
var user = new User();
user.Country = new Country(){Name = "Russia"}; /* User value */
ViewBag.Country = new Country() { Name = "Danmark" }; /* It affects user */
return View(user);
ビュー:それは "デンマーク" の値を持つ "ロシア" 値とドロップダウンで、テキストボックスを表示します
@Html.EditorFor(user => user.Country.Name)
@Html.DropDownListFor(user => user.Country.Name,
new SelectList(ViewBag.CountryList, "Name", "Name", Model.Country), "...")
「ロシア」の代わりに選択された。
この動作に関するドキュメントは見つかりませんでした。この動作は正常ですか?なぜそれは正常ですか?なぜならViewBagとModelのプロパティ名を制御することは非常に難しいからです。 HTMLヘルパーが生成されたコントロールの値を拾うために、いくつかの異なる場所に見えるためだ
ViewBag.Country = new Country() { Name = "Danmark" }; /* It affects user */
:
This sample MVC3 project sources
名前の衝突を避けるため、常にViewBagプロパティ名にprefixを使用することをお勧めしますか? Ex。 ViewBag.ViewBag_Country –
聖なるもの、そうです。これをありがとう...私の日を救った::) – dizzwave