如何使SelectList中的selectedItem成为动态的

时间:2010-08-11 08:40:16

标签: c# asp.net-mvc

我有一个SelectList:

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

这可以正常工作,因为你可以看到我正在订购列表。现在当有人想要编辑某些东西时,无论它在哪个类别,selectedItem总是默认为第一个。

我如何对其进行编码,以使selectedItem成为分类所属的正确类别? 即从DB动态生成。

2 个答案:

答案 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))