4

我想填充一个项目的下拉列表。我使用MVC4与Twitter的引导的造型,在视觉工作室2012年在Twitter引导样式和C中填充@ html.DropDownListFor()项目#

,我对控制器的代码是:

String[] genders = { "Male","Female","Other"}; 
ViewBag.genders = new SelectList(genders); 

在我的观点是:

@Html.DropDownListFor("genders", "Select a gender", new { @class = "form-control" }) 

然而,我得到一个错误:

'The type arguments for method 'System.Web.Mvc.Html.SelectExtensions.DropDownListFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>, System.Collections.Generic.IEnumerable, object)' cannot be inferred from the usage. Try specifying the type arguments explicitly.'

我已经尝试了各种其他形式的声明。但基本上我想保持控制器的状态并在视图中编辑语句。但我愿意接受任何人愿意提出的建议,以帮助我解决这个问题。

在此先感谢

回答

15

试试这个:

@Html.DropDownListFor(m=>m.SelectedGender, (SelectList)ViewBag.genders, "Select gender", new { @class = "form-control" }) 

m=>m.SelectedGender,在这里你值绑定到您的视图模型的东西(或者如果你有没有模型,你应该使用@Html.DropDownList提供一个字符串代替)。

+0

谢谢你的帮助,但仍然有一些错误: System.Web.Mvc.HtmlHelper ”中有一个名为没有适用的方法‘DropDownListFor’,但似乎有通过一个扩展方法名称。扩展方法不能动态分派。考虑转换动态参数或调用扩展方法而不使用扩展方法语法。 如何才能演员的争论? – Gman16

+1

尝试投影ViewBag.genders作为SelectList:'(SelectList)ViewBag.genders' – cederlof

+0

@ Gman16太棒了!我更新了演员的答案。如果解决了问题,请将答案标记为已接受。 – cederlof

2

@Html.DropDownListFor期望lamda表达式,而不是字符串作为它的第一个参数。

现在...使用DropDownListFor ...您需要一个模型在您的视图。这种模式应该有一个属性就是当你张贴的形式,其中DDL是你将存储选定值。

@Html.DropDownListFor(m=>m.Gender, (SelectList)ViewBag.genders, "Select gender", new { @class = "form-control" }) 

现在,如果你没有在您的视图模型......你应该使用@Html.DropDownList() 在这种情况下,您只需输入名称作为第一个参数即可。

@Html.DropDownList("SelectedGender", (SelectList)ViewBag.genders, "Select gender", new { @class = "form-control" })