Chúng tôi đã tìm thấy hành vi lạ trong DropDownListFor (bản phát hành MVC3 ASP.NET). Nó chọn giá trị thuộc tính ViewBag thay vì giá trị thuộc tính Model trong menu thả xuống.Giá trị thuộc tính ViewBag trong DropDownListFor thay vì giá trị thuộc tính Model
mẫu:
public class Country {
public string Name { get; set; }
}
public class User {
public Country Country { get; set; }
}
khiển Index hành động:
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);
Xem:
@Html.EditorFor(user => user.Country.Name)
@Html.DropDownListFor(user => user.Country.Name,
new SelectList(ViewBag.CountryList, "Name", "Name", Model.Country), "...")
Nó sẽ hiển thị hộp văn bản có giá trị "Nga" và thả xuống với giá trị "Danmark" được chọn thay vì "Nga".
Tôi không tìm thấy bất kỳ tài liệu nào về hành vi này. Hành vi này có bình thường không? Và tại sao nó lại bình thường? Bởi vì rất khó kiểm soát các tên thuộc tính của ViewBag và Model.
This sample MVC3 project sources
Bạn có đề xuất luôn sử dụng tiền tố cho tên thuộc tính ViewBag để tránh xung đột tên không? Ví dụ ViewBag.ViewBag_Country –
holy crap, bạn nói đúng. Cảm ơn vì điều này ... đã cứu ngày của tôi ... :) – dizzwave