这是模型:
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))
答案 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));