ASP.NET MVC 4 ViewModel с данными раскрывающегося списка

я использую @html.EditorFor для отображения моей модели в режиме редактирования, а выпадающий список не отображается.

вот моя ViewModel:

     public class RiskAutoViewModel
     {
       public RiskAutoViewModel()
       {
         VehicleMakeList = new SelectList(new List<VehicleMake>() { new VehicleMake() { Id = 1, Name = "Renault" }, new VehicleMake() { Id = 2, Name = "Peugeot" } });
       }


    public int NoClaimsDegree { get; set; }

    public int VehicleValue { get; set; }

    public int EngineCapacity { get; set; }

    public int VehicleMake { get; set; }

    public SelectList VehicleMakeList { get; set; }
  }

VehicleMake отображается как поле и VehicleMakeList не отображается вообще. Я хотел бы отобразить раскрывающийся список, содержащий список VehicleMake и установите его значение в значение VehicleMake.

когда модель сохранена, VehicleMake должно быть установлено значение выбранного элемента в список.

как я могу это сделать ?

редактировать

так как я не могу ввести любой код в поле комментариев ниже, я напишу здесь.

Я закончил создание EditorTemplate, например:

<div class="editor-label">
    @Html.LabelFor(model => model.VehicleMakeList)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
    @Html.ValidationMessageFor(model => model.VehicleMake)
</div>

и теперь моя ViewModel выглядит так:

[Required]
[ScaffoldColumn(false)]
public int VehicleMake { get; set; }

[Display(Name = "Marque", Prompt = "Marque", Description = "Renseigne la marque du véhicule")]
public SelectList VehicleMakeList { get; set; }

теперь это приводит меня к другому вопросу (возможно, я должен как в другом потоке), но у меня на самом деле есть два выпадающих списка в этом представлении. И во втором раскрывающийся список в основном динамичен, и они зависят от элемента, выбранного в первом раскрывающемся списке. Это очень легко сделать с AJAX, но с MVC я потерян. Как люди обычно это делают ?

4 ответов


к сожалению, в Редакторе шаблонов нет встроенной поддержки выпадающих списков. Вы можете либо написать свой собственный шаблон редактора, либо использовать HTML helper метод @Html.DropDownListFor() на ваш взгляд.

ответ Дарина Димитрова на этот вопрос может провести вас через процесс создания шаблона редактора для выпадающих списков, если вы так склонны.

самый быстрый способ получить эту работу - сделать это, по вашему мнению:

@Html.EditorFor(model => model.NoClaimsDegree)
@Html.EditorFor( model => model.VehicleValue )
@Html.EditorFor( model => model.EngineCapacity )
@Html.DropDownListFor( model => model.VehicleMake, Model.VehicleMakeList, "Select a make" )

Я думаю, что модель для dropdownlist должна быть:

public List<System.Web.Mvc.SelectListItem> VehicleMakeList {get; set;}

и инициализируется как:

VehicleMakeList = new List<System.Web.Mvc.SelectListItem>() 
{ 
   new SelectListItem { Value = "1", Text = "Renault" }, 
   new SelectListItem { Value = "2", Text = "Peugeot" } 
};

или с помощью источника данных:

    VehicleMakeList = db.VehicleMakers /*EF, LINQ2SQL, ADO.NET or any supported external source*/
       .Select(v=> new SelectListItem { Text = v.Name, Value = v.Id})
       .ToList();

вид:

@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)

привязка dropdownlist очень сложно в MVC вы можете сделать это с помощью этого в контроллере получить все ваши города список положить его в viewBag

создать

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name");

пользователей.CityID если вы находитесь в Edit так, что на редактировать его Выберите город

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name", user.CityID);

на ваш взгляд, просто сделайте этот трюк

     @Html.DropDownList("CityId", "Select")

Это самый простой способ я знаю....


привязка выпадающего списка легко. код следующим образом:

public ActionResult BindWithModel()
{
    List<SelectListItem> items = new List<SelectListItem>();

    items.Add(new SelectListItem 
                { Text = "Select Category", Value = "0", 
                        Selected = true });
    items.Add(new SelectListItem
                { Text = "Beverages", Value = "1" });
    items.Add(new SelectListItem
                { Text = "Condiments", Value = "2" });
    items.Add(new SelectListItem
                { Text = "Confections", Value = "3" });
    items.Add(new SelectListItem
                { Text = "Dairy Products", Value = "4" });
    items.Add(new SelectListItem
                { Text = "Grains/Cereals", Value = "5" });
    items.Add(new SelectListItem
                { Text = "Meat/Poultry", Value = "6" });
    items.Add(new SelectListItem
                { Text = "Produce", Value = "7" });
    items.Add(new SelectListItem
                { Text = "Seafood", Value = "8" });

    var model = new CategoryModel()
    {
        lstCategory = items,
        selected = 1
    };

    return View(model);
}

код в поле зрения

@model BindMvcDropdownList.Models.CategoryModel

<h1>Bind MVC DropDownList with Model</h1>

@Html.DropDownListFor(x => x.selected, Model.lstCategory)

код взят отсюда http://dotnetmentors.com/mvc/how-to-bind-dropdownlist-in-asp-net-mvc-application.aspx