2017-08-24 38 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”,因此您的代码甚至不会编译 –

相关问题