我有一个asp.net mvc应用程序,我有这个模型:
public class Vehicule
{
private string matricule;
private int id_vehicule;
private string type;
private string chauffeur;
public int Id_vehicule
{
get { return id_vehicule; }
set { id_vehicule = value; }
}
public string Matricule
{
get { return matricule; }
set { matricule = value; }
}
public string Type
{
get { return type; }
set { type = value; }
}
public string Chauffeur
{
get { return chauffeur; }
set { chauffeur = value; }
}
}
在我看来,我想替换这个片段:
<select name="id_vehicule" >
@foreach(Vehicule v in Model.GetVehicleList()){
<option value="v.Id_vehicule">v.Type</option>
}
</select>
使用html帮助Html.ListBox
或Html.ListBoxFor
的其他代码。
如何修改我的代码才能执行此任务?
答案 0 :(得分:2)
下拉列表和列表框之间存在差异 - &gt;列表框允许选择多个项目。在您显示的示例代码中,您尚未在multiple="multiple"
元素上设置<select>
属性,因此如果您想要相当于此代码,则宁可使用Html.DropDownList而不是Html .ListBox按要求:
@Html.DropDownList("id_vehicule", new SelectList(Model.GetVehicleList(), "Id_vehicule", "Type"))
但我宁愿使用视图模型和帮助器的强类型版本。所以基本上我会在我的视图模型上定义一个属性,它将保存所选的项目值:
public int SelectedVehiculeId { get; set; }
我还会定义一个包含可用项的属性:
public SelectList Vehicules { get; set; }
控制器操作将填充:
model.Vehicules = new SelectList(GetVehicleList(), "Id_vehicule", "Type");
然后在视图中:
@Html.DropDownListFor(x => x.SelectedVehiculeId, Model.Vehicules)
这里的想法是视图不应该调用任何方法来检索数据。准备视图模型时,这是控制器的责任。该视图仅用于显示数据。