MVC3下拉列表未选择所选项目

时间:2011-11-16 21:28:56

标签: asp.net-mvc-3 drop-down-menu selection

我有一个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)

3 个答案:

答案 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。这就是我解决这个问题的方法......