从模型中的IEnumerable填充下拉列表,设置选定的值

时间:2016-03-23 02:47:13

标签: c# asp.net-mvc dropdownlistfor

这是模型:

public class PolicyDetail
{
    public Policy Policy { get; set; }
    public IEnumerable<Insured> Insured { get; set; }
    public IEnumerable<Risk> Risk { get; set; }
    public IEnumerable<Construction> Construction { get; set; }
}

施工就像这样:

public class Construction
{
    public int ConstructionID { get; set; }
    public string ConstructionType { get; set; }
}

在DB中,只有4行。它基本上是一个枚举。

在Risk中有这个属性:

public int ConstructionID { get; set; }

在将模型发送到视图之前,我们填写PolicyDetail中的每个对象,其中被保险人和风险是政策的子女。每次加载构造都会加载所有四行。

因此,在模型中,我们列出了所有的风险。当我们显示它们时,我们希望将Constructions显示为下拉列表,并将所选值设置为Risk.ConstructionID中的值。

令人惊讶的是,这些简单的下拉可以在MVC中烧掉多少心脏。

@foreach (var item in Model.Risk)
{
    ... Other items in Risk

    <div class="form-group">
        @Html.Label("Construction Type", new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList(?????????)
        </div>
    </div>

    ... Other items in Risk
}

如何使用

中的所有项目填充该下拉列表
Model.Constrution

并将所选项目设置为

中的内容
item.ConstrucitonID

谢谢!

修改

这是工作解决方案:

@Html.DropDownList("ConstructionType", new SelectList(Model.Construction.Distinct().ToList(), "ConstructionID", "ConstructionType", item.ConstructionID))

1 个答案:

答案 0 :(得分:4)

您需要将IEnumerable<Construction>转换为SelectList并指定所选值。

如下所示(注意:我没有在VS中对此进行编码,因此语法或参数可能不正确,但您会明白这一点)

@Html.DropDownList("ddlConstructionId", new SelectList(Model.Constrution, "ConstructionID" , "ConstructionType", item.ConstrucitonID))

创建SelectList时,您需要指定所选的值。我认为这是最好的构造函数:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField,
    object selectedValue
)

所以,在你的情况下,它将是:

@Html.DropDownList("CompanyName",
               new SelectList(Model.Construction.Distinct().ToList(), "ConstructionID", "ConstructionType", item.ConstrucitonID));