2

我有一个返回 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)
4

2 回答 2

4

尽量避免动态的东西,比如ViewBagand 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);
}
于 2012-10-13T22:56:57.747 回答
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)
于 2012-10-13T22:44:04.473 回答