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