来自IEnumerable的DropDownList

时间:2015-12-15 22:48:32

标签: c# asp.net asp.net-mvc razor

我只想要一个简单的下拉列表,它将由IEnumerable填充。我有

@model WebApplication4.Models.VENDOR

该模型包含一个IEnumerable的BANK对象。我希望下拉列表由这些对象的字段填充,BANK_NAME。我是MVC和.NET的新手。这似乎是一件容易的事,我只是不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

使用特定于您视图的viewmodel

public class CreateVendor
{ 
  public string VendorName {set;get;}
  public List<SelectListItem> Banks {set;get;}
  public int SelectedBank {set;get;}
}

在你的GET Action方法中

public ActionResult Create()
{
  var vm = new CreateVendor();
  //Hard coded for demo. You may replace with your db entries (see below)
  vm.Banks = new List<SelectListItem> {
     new SelectListItem { Value="1","Chase bank" },
     new SelectListItem { Value="2","PNCbank" },
     new SelectListItem { Value="3","BOA" } 
  };
  return View(vm);
}

在您认为CreateVendor视图模型强类型的视图中,您可以使用DropDownListFor辅助方法。

@model CreateVendor
@using(Html.BeginForm())
{
  <label>Vendor name </label>
  <label>Bank</label>
  @Html.DropDownListFor(s=>s.SelectedBank,Model.Banks,"Select one")
  <input type="submit" />    
}

你的HttpPost动作方法将是

[HttpPost]
public ActionResult Create(CreateVendor model)
{
  // Read model.VendorName and model.SelectedBank
  //  var vendor = new Models.Vendor();
  //  vendor.Name = model.VendorName;
  //  vendor.BankId= model.SelectedBankId;
  //  yourDbContext.Vendors.Add(vendor);
  //  yourDbContext.SaveChanges();
  //  Redirect to a success action
}

如果要将硬编码的Banks数据替换为表中的数据。将类/属性名称替换为您的实际类/属性名称。

  var db= new YourDbContext();
  vm.Banks = db.Banks.Select(s=>  new SelectListItem {
                                        Value=s.BANK_ID.ToString(), 
                                        Text=s.BANK_NAME }).ToList();