我有一个返回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)
答案 0 :(得分:4)
尽量避免使用ViewBag
和ViewData
这样的动态内容。使用强类型视图。
ViewModel只是一个POCO类,我们将使用它来在视图和操作方法之间传输数据。它将特定于视图。
例如:如果您想创建一个创建产品的视图。所以创建一个像这样的视图模型
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 :(得分: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)