@Html.DropDownList に正しいパラメータを渡していません。ここの MSDN ドキュメントから: http://msdn.microsoft.com/en-us/library/dd470380(v=vs.100).aspx
次のオーバーロードを使用したいようです。
public static MvcHtmlString DropDownList(
this HtmlHelper htmlHelper,
string name,
IEnumerable<SelectListItem> selectList,
Object htmlAttributes
)
したがって、最初のパラメーターは正しい名前文字列ですが、2 番目のパラメーターとして SelectList が必要であり、3 番目のパラメーターとして HtmlAttributes が必要です。次のようにしてみてください。
<div class="editor-field">
@Html.DropDownList("StandID", ViewBag.StandID, new {style = "width:150px"})
</div>
アップデート:
ViewBag に正しいものを渡しているかどうかもわかりません。新しい SelectList オブジェクトと同じに設定しており、DropDownList には SelectListItems のコレクションが必要です。
コントローラーでこれを試してください:
var stands = db.Stands.ToList().Where(s => s.ExhibitorID == null)
.Select(s => new SelectListItem
{
Value = s.StandID.ToString(),
Text = s.Description + "-- £" + s.Rate.ToString()
});
ViewBag.StandID = stands;
アップデート:
これが私がこれと同じことを達成する方法です。IEnumerable を返す静的メソッドがあり、ビューでそのメソッドを参照します。(VB 構文で申し訳ありません)
Namespace Extensions
Public Module Utilities
Public Function SalutationSelectList(Optional ByVal Salutation As String = "") As IEnumerable(Of SelectListItem)
Dim ddl As New List(Of SelectListItem)
ddl.Add(New SelectListItem With {.Text = "", .Value = "", .Selected = If(Salutation = "", True, False)})
ddl.Add(New SelectListItem With {.Text = "Mr.", .Value = "Mr.", .Selected = If(Salutation = "Mr.", True, False)})
ddl.Add(New SelectListItem With {.Text = "Ms.", .Value = "Ms.", .Selected = If(Salutation = "Ms.", True, False)})
ddl.Add(New SelectListItem With {.Text = "Mrs.", .Value = "Mrs.", .Selected = If(Salutation = "Mrs.", True, False)})
ddl.Add(New SelectListItem With {.Text = "Dr.", .Value = "Dr.", .Selected = If(Salutation = "Dr.", True, False)})
Return ddl
End Function
End Module
End Namespace
@Html.DropDownListFor(Function(org) org.Salutation, SalutationSelectList())