2011-11-16 133 views
5

我有一个C#.Net MVC3网络应用程序。我正在使用下拉列表遍布整个地方并取得成功。但是,我遇到了两个问题。唯一的区别是我在代码中创建SelectLists而不是使用查找表。我使用查找表来查看所有其他Drop Downs。当我在代码中快速查看SelectLists时,正确的项目将Selected属性值设置为true。但是,页面加载时,不显示具有Selected属性的项目。第一项是。有任何想法吗?这是其中的一个。我尝试了以下两种方法。在这两种情况下,ViewBag.DateToYear和选择列表的DateToYear有正确的价值观和 '选择' 属性设置MVC3下拉列表中未选择所选项目

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) 
+2

你能发表一些代码吗? –

+0

@Thhomas ....有帮助吗? – MikeTWebb

+0

您是否试过DropDownListFor?为什么不把SelectList选项作为A)ViewBag或B)强类型视图模型的一部分?我没有看到你如何解决这个问题。 –

回答

5

不知道如果是这样的话,但我有一些问题没有得到选择的前几天dropdownboxes。

我的问题是:我有一个@model.Options,我创建了一个@html.dropdownlist("Options", @model.Options, [...])。但是,因为它们有相同的名称,所以它有点矛盾。当我使用@html.dropdownlist("anythingElse", @model.Options, [...])时,它工作正常。

当我QuickWatched return View(model)选定的选项似乎也设置正确,所以它花了一段时间来弄清楚。也许你有同样的问题?

+0

@Ron ...你摇滚!就是这样。男人,这是一个经典的错误 – MikeTWebb

+0

不客气。很高兴我能帮上忙。花了我很长时间才弄明白:P –

+0

感谢它也适用于我... –

6

问题是,SelectList按设计工作。该错误在设计中。您可以将Selected Property设置为SelctedItem,但如果您使用GetEnumerator()遍历列表(或者如果Mvc为您执行此操作),则将完全忽略它。 Mvc将创建新的SelectfListItems。

您必须将SelectList ctor与SelectListItem [],文本名称,值名称和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"); 

第二种选择应选择。

+0

我试过你的方法,它的工作...谢谢 – MikeTWebb

0

同样的事情也发生在我身上,请确保您不给出与您在模型上给出的属性名称相同的ID。这就是我如何解决这个问题...