在的foreach循环创造了许多DropDownListFor [复制](create many D

2019-08-31 07:31发布

这个问题已经在这里有一个答案:

  • DropDownListFor不一样,如果在for循环选择值 6个回答
  • 如何设置默认值在运行时在MVC选择列表 2个回答

我要动态地创建DropDownLists出一个列表,其中供应的SelectList和行业里保存选择的。

public class ViewModel
{
    public List<Material_Select> materialSelect { get; set; }
}

public class Material_Select
{
    public SelectList selectList { get; set; }
    public int MaterialId { get; set; }
}

在视图中,我想通过materialSelect列表循环和动态创建DropDownLists。

事情是这样的:

int count = 0;
foreach (var item in Model.materialSelect)
{
    count++;
    <div class="editor-label">
        @Html.LabelFor(model => model.materialSelect)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(item.MaterialId, item.selectList)
    </div>       
}

在HttpPost的ActionResult我需要选择的值。 有没有人有一个想法如何解决这个问题?

Answer 1:

你或许应该使用EditorTemplates 。 这允许你excatly你描述做。 如果你创建一个强类型的局部视图〜/查看/共享/ EditorTemplates / Material_Select.cshtml(视图已经被命名为相同型号),看起来像:

@model Material_Select

<div class="editor-label">
    @Html.LabelFor(m => m.MaterialId)
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.MaterialId, Model.selectList)
</div>

然后在你的整体形状,你可以只要致电:

@Html.EditorFor(m => m.materialSelect)

它会自动列举你的收集和呈现集合中的每个项目的编辑模板。



Answer 2:

假设在0计数开始,你的动作后收到的方法类型视图模型的参数,你可以尝试一下本作绑定MaterialId每个下拉列表:

foreach (var item in Model.materialSelect)
{
    count++;
    <div class="editor-label">
       Name for de dropdown
    </div>
    <div class="editor-field">
        @Html.DropDownList("materialSelect[" + count + "].MaterialId ", item.selectList)
        @Html.ValidationMessageFor(model => model.gradationId)
    </div>       
}


文章来源: create many DropDownListFor in foreach-loop [duplicate]