【问题标题】:create many DropDownListFor in foreach-loop [duplicate]在 foreach 循环中创建许多 DropDownListFor [重复]
【发布时间】:2013-04-16 10:17:42
【问题描述】:

我想从一个列表中动态创建 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 List 并动态创建 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 我需要获取选定的值。有谁知道如何解决这个问题?

【问题讨论】:

  • 您不能使用 foreach 循环为集合生成表单控件 - 请参阅 this answer 以获得解释)

标签: c# asp.net-mvc html.dropdownlistfor html-select


【解决方案1】:

您可能应该使用EditorTemplates。这些允许你做你所描述的事情。如果您在 ~/Views/Shared/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)

这将自动枚举您的集合并为集合中的每个项目呈现编辑器模板。

【讨论】:

    【解决方案2】:

    假设计数从 0 开始,并且你的 action post 方法接收到一个 ViewModel 类型的参数,你可以尝试为每个下拉列表绑定 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>       
    }
    

    【讨论】:

    • 谢谢!我对您的答案进行了更改。 @Ian Routledge 的回答更合适,因为它使用了基本的 mvc 技术。
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 2016-10-01
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多