从控制器或视图模型创建下拉列表

时间:2011-07-12 11:41:03

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

如何在控制器中创建SelectList并将其传递给我的视图?我需要给“ - 选择 - ”选项赋值为0。

我正在回复replies that I got from Jeremey of Fluent Validation

这就是我现在拥有的。我的观点模型:

[Validator(typeof(CreateCategoryViewModelValidator))]
public class CreateCategoryViewModel
{
    public CreateCategoryViewModel()
    {
        IsActive = true;
    }

    public string Name { get; set; }
    public string Description { get; set; }
    public string MetaKeywords { get; set; }
    public string MetaDescription { get; set; }
    public bool IsActive { get; set; }
    public IList<Category> ParentCategories { get; set; }
    public int ParentCategoryId { get; set; }
}

我的控制器。

public ActionResult Create()
{
    List<Category> parentCategoriesList = categoryService.GetParentCategories();

    CreateCategoryViewModel createCategoryViewModel = new CreateCategoryViewModel
    {
        ParentCategories = parentCategoriesList
    };

    return View(createCategoryViewModel);
}

这就是我的看法:

@Html.DropDownListFor(x => x.ParentCategoryId, new SelectList(Model.ParentCategories, "Id", "Name", Model.ParentCategoryId), "-- Select --")

如何在控制器或视图模型中创建下拉列表并将其传递给视图?我需要“ - 选择 - ”选项,其值为0.

2 个答案:

答案 0 :(得分:3)

在您的模型中,将IList<Category>更改为SelectList,然后将其实例化为此...

List<ParentCategory> parentCategories = categoryService.GetParentCategories();

parentCategories.Insert(0, new ParentCategory(){ Id = "0", Name = "--Select--"});

ParentCategories = new SelectList(parentCategories, "Id", "Name");

然后在您的视图中,您只需致电

@Html.DropDownListFor(m => m.ParentCategoryId, Model.ParentCategories);

答案 1 :(得分:0)

我看到它完成的一种方法是创建一个对象来包装下拉项的id和值,如List<SelectValue>,并将它在ViewModel中传递给视图,然后使用HTML帮助者构建下拉列表。

public class SelectValue
{
    /// <summary>
    /// Id of the dropdown value
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// Display string for the Dropdown
    /// </summary>
    public string DropdownValue { get; set; }
}

以下是视图模型:

public class TestViewModel
{
    public List<SelectValue> DropDownValues {get; set;}
}

以下是HTML Helper:

public static SelectList CreateSelectListWithSelectOption(this HtmlHelper helper, List<SelectValue> options, string selectedValue)
{
    var values = (from option in options
                  select new { Id = option.Id.ToString(), Value = option.DropdownValue }).ToList();

    values.Insert(0, new { Id = 0, Value = "--Select--" });

    return new SelectList(values, "Id", "Value", selectedValue);
}

然后在你看来你打电话给帮助者:

@Html.DropDownList("DropDownListName", Html.CreateSelectListWithSelect(Model.DropDownValues, "--Select--"))