我有一个C#.Net MVC3网络应用程序。我正在使用Drop Down列表并取得成功。但是,有两个我遇到麻烦。唯一的区别是我在代码中动态创建SelectLists
而不是使用查找表。我为所有其他Drop Downs使用查找表。当我在代码中快速观察SelectLists
时,正确的项目Selected
属性值设置为true
。但是,页面加载时,不会显示具有Selected
属性的项目。第一项是。有任何想法吗?这是那些令人讨厌的人之一。我在下面尝试了两种方法。在这两种情况下,ViewBag.DateToYear和SelectList DateToYear都有正确的值和'Selected'属性集
1)
//控制器
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) //控制器 同上,
//视图
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)
答案 0 :(得分:6)
问题是,SelectList按设计工作。错误在设计中。您可以在SelctedItem中设置Selected Property,但如果您使用GetEnumerator()遍历列表(或者如果Mvc为您执行此操作),则将完全忽略此属性。 Mvc将改为创建新的SelectfListItem。
您必须将SelectList ctor与SelectListItem [],Text-Name,Value-Name和SelectedValue一起使用。请注意将SelectValue传递给您想要选择的SelectListItem的VALUE,而不是SelectListItem本身!例如:
为什么不在控制器中做?
伪代码:
//控制器
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");
应选择第二个选项。
答案 1 :(得分:5)
不确定是否是这种情况,但我在几天前没有选择下拉框时出现问题。
我的问题是:我有一个@model.Options
,我创建了一个@html.dropdownlist("Options", @model.Options, [...])
。但是,因为它们具有相同的名称,所以它有些冲突。当我使用@html.dropdownlist("anythingElse", @model.Options, [...])
时,它工作正常。
当我快速观看return View(model)
所选的选项似乎也设置正确时,所以需要一段时间才能弄明白。也许你有同样的问题?
答案 2 :(得分:0)
同样的事情也发生在我身上,请确保您没有提供与您在模型上提供的属性名称相同的ID。这就是我解决这个问题的方法......