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

Populate Drop Down List from IEnumerable in the Model, Set Selected Value

这是型号:

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; }
}

而在数据库中,只有 4 行。它基本上是一个枚举。

在 Risk 中是这个 属性:

public int ConstructionID { get; set; }

在将模型发送到视图之前,我们在 PolicyDetail 中填充每个对象,其中 Insured 和 Risk 是 Policy 的子对象。每次都加载所有四行施工。

因此,在模型中,我们列出了所有风险。当我们显示它们时,我们希望将 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))

您需要将 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));