具有下拉列表的Asp.Net MVC和SelectListItem协助

我正在尝试构建一个Dropdownlist,但与Html.DropDownList渲染作斗争。

我上课了:

public class AccountTransactionView { public IEnumerable Accounts { get; set; } public int SelectedAccountId { get; set; } } 

这基本上是我现在的视图模型。 帐户列表以及用于返回所选项目的属性。

在我的控制器中,我像这样准备好数据:

 public ActionResult AccountTransaction(AccountTransactionView model) { List accounts = Services.AccountServices.GetAccounts(false); AccountTransactionView v = new AccountTransactionView { Accounts = (from a in accounts select new SelectListItem { Text = a.Description, Value = a.AccountId.ToString(), Selected = false }), }; return View(model); } 

现在的问题是:

我正在尝试在我的视图中构建Drop:

  

我收到以下错误:

具有键“SelectedAccountId”的ViewData项的类型为“System.Int32”,但必须是“IEnumerable”类型。

为什么要我退回整个项目清单? 我只想要选中的值。 我该怎么做?

您有一个视图模型,您的视图强类型=>使用强类型帮助程序:

 <%= Html.DropDownListFor( x => x.SelectedAccountId, new SelectList(Model.Accounts, "Value", "Text") ) %> 

还要注意我使用SelectList作为第二个参数。

在您的控制器操作中,您返回作为参数传递的视图模型,而不是您在正确设置Accounts属性的操作中构建的视图模型,因此这可能会有问题。 我已经清理了一下:

 public ActionResult AccountTransaction() { var accounts = Services.AccountServices.GetAccounts(false); var viewModel = new AccountTransactionView { Accounts = accounts.Select(a => new SelectListItem { Text = a.Description, Value = a.AccountId.ToString() }) }; return View(viewModel); } 

第1步:你的Model类

 public class RechargeMobileViewModel { public string CustomerFullName { get; set; } public string TelecomSubscriber { get; set; } public int TotalAmount { get; set; } public string MobileNumber { get; set; } public int Month { get; set; } public List getAllDaysList { get; set; } // Define the list which you have to show in Drop down List public List getAllWeekDaysList() { List myList = new List(); var data = new[]{ new SelectListItem{ Value="1",Text="Monday"}, new SelectListItem{ Value="2",Text="Tuesday"}, new SelectListItem{ Value="3",Text="Wednesday"}, new SelectListItem{ Value="4",Text="Thrusday"}, new SelectListItem{ Value="5",Text="Friday"}, new SelectListItem{ Value="6",Text="Saturday"}, new SelectListItem{ Value="7",Text="Sunday"}, }; myList = data.ToList(); return myList; } } 

步骤2:调用此方法填充控制器Action中的Drop down

 namespace MvcVariousApplication.Controllers { public class HomeController : Controller { public ActionResult Index() { RechargeMobileViewModel objModel = new RechargeMobileViewModel(); objModel.getAllDaysList = objModel.getAllWeekDaysList(); return View(objModel); } } } 

步骤3:按如下方式填写下拉列表

  @model MvcVariousApplication.Models.RechargeMobileViewModel @{ ViewBag.Title = "Contact"; } @Html.LabelFor(model=> model.CustomerFullName) @Html.TextBoxFor(model => model.CustomerFullName) @Html.LabelFor(model => model.MobileNumber) @Html.TextBoxFor(model => model.MobileNumber) @Html.LabelFor(model => model.TelecomSubscriber) @Html.TextBoxFor(model => model.TelecomSubscriber) @Html.LabelFor(model => model.TotalAmount) @Html.TextBoxFor(model => model.TotalAmount) @Html.LabelFor(model => model.Month) @Html.DropDownListFor(model => model.Month, new SelectList(Model.getAllDaysList, "Value", "Text"), "-Select Day-")