将html列表框更改为Html.ListBox

时间:2013-11-23 08:33:21

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我有一个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.ListBoxHtml.ListBoxFor的其他代码。

如何修改我的代码才能执行此任务?

1 个答案:

答案 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)

这里的想法是视图不应该调用任何方法来检索数据。准备视图模型时,这是控制器的责任。该视图仅用于显示数据。