2011-07-12 56 views
4

如何在我的控制器中創建一個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.

回答

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); 
+0

我需要「 - 選擇 - 」選項有0。當值它是否在你的代碼中聲明? –

+0

對不起,我錯過了那一點。爲什麼你需要它的值爲0? – simonlchilds

+0

我正在使用Fluent驗證。 Jeremy說我需要一個值爲0的選擇選項,否則如果我沒有在下拉列表中選擇一個值,我的ModelState將始終爲假。 –

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助手:

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--")) 
相關問題