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" })