2010-08-11 46 views
2

我有一个的SelectList:如何使selectedItem属性中的SelectList是动态

SelectList DropDownListOfCatergories = new SelectList(UnitOfWork.ClassifiedCategories.FindAll().OrderBy(Order()), "Category", "Category"); 

这工作得很好,你可以看到我订货清单。现在,当有人想要编辑某些东西时,selectedItem总是默认为第一个,不管它属于哪个类别。

如何对它进行编码,使selectedItem成为分类所在的正确类别?即从数据库动态生成的 。

回答

0

这里是我会怎么做,在一个辅助方法:

public IEnumerable<SelectListItem> GetClassifiedCategories(IEnumerable<ClassifiedCategory> categories, string selectedCategoryName) 
{ 
    var list=new List<SelectListItem>(); 

    foreach (var cat in categories) 
    { 
     var item = new SelectListItem() 
         { 
          Text = cat.Name, 
          Value = cat.Id 
         }; 
     if (cat.Name==selectedCategoryName) 
      item.Selected = true; 
     list.Add(cat); 
    } 
    return list; 
} 

很显然,你会想要做一个比较,对IDS而不是名称。也可直接拨打电话到的UnitOfWork并不desirible(但从应用架构点)

这里是你将如何在一个视图(剃刀语法)使用的一个例子:

@Html.DropDownListFor(model=>model.ClassifiedCategoryId, Helpers.GetClassifedCategories(UnitOfWork.ClassifiedCategories.FindAll().OrderBy(Order()), Model.ClassifiedCategoryId)) 
0

不知道我是否关注。你的意思是你想指定选择的项目?如果是这样(我在这里使用MVC 1.0),请使用带4个参数的过载,例如

SelectList DropDownListOfCatergories = new SelectList(UnitOfWork.ClassifiedCategories.FindAll().OrderBy(Order()), "Category", "Category", "My Selected Item");