将通用列表绑定到MVC3中的下拉列表

问题描述 投票:2回答:3

我有一个返回CategoryID和CategoryName的通用列表方法。我花了足够的时间研究,似乎无法把它放在一起。我在MVC很新。

这是我在存储库中的DropdownList方法。我收回数据......到目前为止一切都很好。

public List<DropdownList> GetDDl()
{

return catDDL; 
}

这是我的控制器代码(尝试它)

   IEnumerable<SelectListItem> liCat =
 userRepository.Getddl().Select(c => new SelectListItem
{
   Value = c.DropDownID.ToString(),
   Text = c.DropDownText
}
ViewBag.catItems = new SelecList(liCat,"Value","Text");

这是我的观点

@Html.Dropdownlist("catItems","Select Category)
asp.net-mvc-3 html.dropdownlistfor
3个回答
4
投票

尽量避免像ViewBagViewData这样的动态内容。使用强类型视图。

ViewModel只是一个POCO类,我们将使用它在视图和操作方法之间传输数据。它将特定于视图。

例如:如果要创建创建产品的视图。所以创建一个这样的viewmodel

public class Product
{
  public string Name { set;get;}
  public IEnumerable<SelectListItem> Categories{ get; set; }
  public string SelectedCategoryId { get; set; }
  //Other Properties as needed

}

现在,在GET动作方法中,您可以创建此视图模型的对象并初始化值并发送到视图。

public ActionResult Create()
{
  var vm=new Product();
  vm.Categories=userRepository.Getddl().
               Select(c => new SelectListItem
                                 {
                                    Value = c.DropDownID.ToString(),
                                    Text = c.DropDownText
                                 });                    
  return View(vm);
}

现在让你的视图强烈输入我们的Product类并使用Html.DropDownListFor辅助方法。

@model PersonsProduct 
@using (Html.BeginForm())
{ 
  @Html.DropDownListFor(x => x.SelectedCategoryId, 
                       new SelectList(Model.Categories,"Value","Text"), "Select")
  <input type="submit" value="save" />
}

现在在您的HttpPost中,您可以获得这样的表单值

[HttpPost]
public ActionResult Create(Product model)
{
  if(ModelState.IsValid)
  {
     //check model.SelectedCategoryId
     //save and redirect
  }
  //to do :reload the dropdown again.
  return view(model);
}

1
投票

应该只是:

控制器:

IEnumerable<SelectListItem> liCat = userRepository.Getddl().Select(c => new SelectListItem
{
   Value = c.DropDownID.ToString(),
   Text = c.DropDownText
}

ViewBag.catItems = liCat

视图:

@Html.Dropdownlist("catItems", ViewBag.catItems)
© www.soinside.com 2019 - 2024. All rights reserved.