asp.net-mvcviewbagdropdownlistfor

How to use a ViewBag to create a dropdownlist?


Controller:

public ActionResult Filter()
{
    ViewBag.Accounts = BusinessLayer.AccountManager.Instance.getUserAccounts(HttpContext.User.Identity.Name);
    return View();
}

View:

<td>Account: </td>
<td>@Html.DropDownListFor("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))</td>

ViewBag.Accounts contains Account objects which have AccountID, AccountName and other properties. I would like a DropDownList called accountid (so that on Form Post I can pass the selected AccountID) and the DropDownList to display the AccountName while having the AccountID as value.

What am I doing wrong in the view code?


Solution

  • You cannot used the Helper @Html.DropdownListFor, because the first parameter was not correct, change your helper to:

    @Html.DropDownList("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))
    

    @Html.DropDownListFor receive in the first parameters a lambda expression in all overloads and is used to create strongly typed dropdowns.

    Here's the documentation

    If your View it's strongly typed to some Model you may change your code using a helper to created a strongly typed dropdownlist, something like

    @Html.DropDownListFor(x => x.accountId, new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))