我有一个 C#.Net MVC3 Web 应用程序。我到处都在使用下拉列表并取得了成功。但是,有两个我遇到了麻烦。唯一的区别是我正在创建 SelectLists
在代码中即时而不是使用查找表。我对所有其他下拉列表使用查找表。当我快速观看 SelectLists
在代码中,正确的项目有 Selected
属性值设置为 true
.但是,当页面加载时,带有 Selected
的项目属性不显示。第一项是。有任何想法吗?这是其中之一。下面两种方法我都试过了。在这两种情况下, ViewBag.DateToYear 和 SelectList DateToYear 都具有正确的值和“Selected”属性集
1)
// Controller
IList<string> dateToYear = new List<string>();
for (int i = 0; i < numberYears; i++)
{
dateToYear.Add(DateTime.Now.AddYears(i).Year.ToString());
}
ViewBag.DateToYear = new SelectList(dateToYear,"2014")
//看法
@Html.DropDownList("DateFromYear", (SelectList)ViewBag.DateToYear )
2)
// Controller
同上
//看法
List<SelectListItem> DateToYear = new List<SelectListItem>();
foreach (var m in ViewBag.DateToYear)
{
DateToYear.Add(new SelectListItem { Selected = @m.Selected, Value = @m.Text, Text = @m.Text });
}
@Html.DropDownList("DateFromYear", DateToYear)
最佳答案
问题是, SelectList 按设计工作。错误在于设计。您可以在 SelctedItem 中设置 Selected 属性,但是如果您使用 GetEnumerator() 遍历列表(或者如果 Mvc 为您执行此操作),这将完全被忽略。 Mvc 将创建新的 SelectfListItems。
您必须将 SelectList ctor 与 SelectListItem[]、Text-Name、Value-Name 和 SelectedValue 一起使用。请注意将要被选择的 SelectListItem 的 VALUE 作为 SelectedValue 传递,而不是 SelectListItem 本身!例子:
为什么不直接在 Controller 中做呢?
伪代码:
// Controller
ViewBag.DateToYear = new SelectList(new[]
{
new SelectListItem { Text = "10", Value = "10" },
new SelectListItem { Text = "15", Value = "15" }
new SelectListItem { Text = "25", Value = "25" },
new SelectListItem { Text = "50", Value = "50" },
new SelectListItem { Text = "100", Value = "100" },
new SelectListItem { Text = "1000", Value = "1000" },
}, "SomeText", "Value", "15");
应该选择第二个选项。
关于asp.net-mvc-3 - MVC3下拉列表未选择所选项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158986/