Controller:
public ActionResult Filter()
{
ViewBag.Accounts = BusinessLayer.AccountManager.Instance.getUserAccounts(HttpContext.User.Identity.Name);
return View();
}
Ansicht:
<td>Account: </td>
<td>@Html.DropDownListFor("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))</td>
Die "ViewBag.Accounts" enthält "Account"-Objekte, die "AccountID", "AccountName" und andere Eigenschaften haben. Ich möchte eine "DropDownList" mit dem Namen accountid (so dass ich in Form Post die ausgewählte AccountID übergeben kann) und die "DropDownList" soll den "AccountName" anzeigen und die "AccountID" als Wert haben.
Was mache ich im Code der Ansicht falsch?
Sie können den Helper @Html.DropdownListFor
nicht verwenden, da der erste Parameter nicht korrekt ist, ändern Sie Ihren Helper in:
@Html.DropDownList("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))
@Html.DropDownListFor
erhält im ersten Parameter einen Lambda-Ausdruck in allen Überladungen und wird verwendet, um stark typisierte Dropdowns zu erstellen.
Wenn Ihr View stark auf ein Model typisiert ist, können Sie Ihren Code ändern, indem Sie einen Helper verwenden, um eine stark typisierte Dropdownliste zu erstellen, etwa so
@Html.DropDownListFor(x => x.accountId, new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))
Ich tue Folgendes
In meiner Aktionsmethode
Dictionary<string, string> dictAccounts = ViewModelDropDown.GetAccounts(id);
ViewBag.accounts = dictAccounts;
In meinem View Code
Dictionary<string, string> accounts = (Dictionary<string, string>)ViewBag.accounts;
@Html.DropDownListFor(model => model.AccountId, new SelectList(accounts, "Value", "Key"), new { style = "width:310px; height: 30px; padding 5px; margin: 5px 0 6px; background: none repeat scroll 0 0 #FFFFFF; vertical-align:middle;" })
Versuchen Sie stattdessen @Html.DropDownList
zu verwenden:
<td>Account: </td>
<td>@Html.DropDownList("accountid", new SelectList(ViewBag.Accounts, "AccountID", "AccountName"))</td>
@Html.DropDownListFor
erwartet ein Lambda als erstes Argument, nicht wie von Ihnen angegeben einen String
für die ID.
Ohne zu wissen, woraus getUserAccounts()
besteht, genügt es zu sagen, dass es eine Art von Sammlung (z.B. IEnumerable
) zurückgeben muss, die mindestens ein Objekt enthält. Wenn es null
zurückgibt, wird die Eigenschaft in der ViewBag nichts haben.