从模型中的 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));
这是型号:
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));