我有一个SelectList:
SelectList DropDownListOfCatergories = new SelectList(UnitOfWork.ClassifiedCategories.FindAll().OrderBy(Order()), "Category", "Category");
这可以正常工作,因为你可以看到我正在订购列表。现在当有人想要编辑某些东西时,无论它在哪个类别,selectedItem总是默认为第一个。
我如何对其进行编码,以使selectedItem成为分类所属的正确类别? 即从DB动态生成。
答案 0 :(得分:0)
不确定我是否关注。您是说要指定所选项目吗?如果是这样(我在这里使用MVC 1.0),请使用带有4个参数的重载,例如
SelectList DropDownListOfCatergories = new SelectList(UnitOfWork.ClassifiedCategories.FindAll().OrderBy(Order()), "Category", "Category", "My Selected Item");
答案 1 :(得分: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而不是名字进行比较。同样直接调用单元工作也是不可取的(从应用程序架构的角度来看)
以下是如何在视图中使用它的示例(Razor语法):
@Html.DropDownListFor(model=>model.ClassifiedCategoryId, Helpers.GetClassifedCategories(UnitOfWork.ClassifiedCategories.FindAll().OrderBy(Order()), Model.ClassifiedCategoryId))