2017-08-24 36 views
0

我想將強類型對象的列表傳遞給位於我的視圖上的下拉列表。如何將強類型對象列表從控制器傳遞到視圖上的下拉列表中?

平時要實現這一點,我在下面的示例中使用ViewBags,如:

public ActionResult ChooseLevel() 
{ 

    List<Levels> LevelList = GetAllLevels(); 

    ViewBag.LevelList = LevelList 

    var model = new Levels(); 
    return View(model); 
} 

而且我只想寫一個觀點,我會獲得上市我所有的級別有:

<div class="form-group"> 
    @Html.LabelFor(model => model.LevelId, new { @class = "control-label col-md-3 col-sm-3" }) 
    <div class="col-md-9 col-sm-9"> 
     @Html.DropDownListFor(model => model.LevelId, new SelectList(ViewBag.LevelList, "LevelId", "LevelName"), "", new { @class = "form-control" }) 
    </div> 
</div> 

但是現在我想知道是否可以簡單地傳遞我的Levels列表,並從下拉列表中選擇它們,而不是先將它們存儲到Viewbag中? 例如:

public ActionResult ChooseLevel() 
{ 
    List<Levels> LevelList = GetAllLevels(); 
    return View(LevelList); 
} 

在一個視圖我會通過對視圖寫IEnumerable接受多個項目:

@model IEnumerable<Levels> 

之後,我可以以某種方式只能選擇一個項目,並張貼回服務器?

我該如何解決這個問題?

+0

只是澄清:在視圖中使用'IEnumerable的'爲什麼如果你期望'DropDownList'中只有單個項目傳入viewmodel?即使你可以通過'Model.LevelList'像'@ Html.DropDownListFor(model => model.LevelId,new SelectList(Model.LevelList,「LevelId」,「LevelName」),「」,new {@class =「form-control」})'。 –

+0

將下拉列表綁定到自己是沒有意義的(您的模型是'Level'和您爲'Level'生成的選項。您想在這裏實現什麼? –

+0

@StephenMuecke我需要只有一個下拉列表的視圖(Level對象內部),並且該下拉應該允許我選擇其中一個級別 –

回答

2

您需要將此列表添加到您現有的模型或視圖模型:

  ModelName objModel = new ModelName(); 
      List<Levels> LevelList = GetAllLevels(); 

      objModel.lstTypes = LevelList.Select(y => new SelectListItem() 
      { 
       Value = y.LevelId.ToString(), 
       Text = y.LevelName.ToString() 
      }); 
     return View(objModel); 

class ModelName 
{ 
public virtual IEnumerable<SelectListItem> lstTypes { get; set; } 
public virtual int intTypeId { get; set; } 
//Other existing properties here 
} 

在你的控制器,你可以現在這個列表返回到您的視圖之前添加到您的型號

那麼你現在可以在您的視圖中顯示它:

@model ModelName 
//First parameter will be the Id that will be selected by your user when they post it 
//Second parameter will be the enumerable list of dropdown 
//Third parameter is the default option which is optional, and the last is the HTML attributes 
@Html.DropDownListFor(c => c.intTypeId, Model.lstTypes , "Please select an item", new { @class = "form-control" }) 
1

您可以創建新的視圖模型包含MULT iple模型(舊模型和LevelList模型)。像這樣:

public class newViewModel 
{ 
    public IEnumerable<level> levels{ get; set;} 
    public OldModel oldModel {get; set;} 
} 
0

Model類

public class TestViewModel 
{ 
    public List<SelectListItem> EnterpriseList { get; set; } 
} 

控制器:

var model = new TestViewModel() { 
      EnterpriseList = EnterpriseData.Select(p=>new SelectListItem() { Value = p.Value,Text = p.Name}).ToList() 
     }; 
     return View(model); 

查看:

@Html.DropDownListFor(p => p.Enterprise, Model.EnterpriseList, "Please select a", new { @class = "form-control", @style = "height: auto" }) 
+0

該模型不包含屬性名稱「Enterprise」,因此您的代碼甚至不會編譯 –

相關問題