Рассмотрим следующую модель:ASP.NET MVC DropDownList не устанавливая выбранное значение
public class TagType
{
public int Id { get; set; }
public string Description { get; set; }
}
public class Tag
{
public int Id { get; set; }
public string Description { get; set; }
public TagType TagType { get; set; }
public DropDownListViewModel TagTypeViewModel { get; set; }
public int TagTypeId { get; set; }
}
У меня есть следующие действия в контроллере:
public ActionResult Edit(int id)
{
// Load from database
IEnumerable<TagType> tagTypes = TagTypeDal.GetAll().ToList();
Tag tag = TagDal.Get(id);
tag.TagTypeViewModel = new DropDownListViewModel();
tag.TagTypeViewModel.Items = new List<SelectListItem>();
tag.TagTypeViewModel.Items.Add(new SelectListItem { Text = "None", Value = "-1" });
tag.TagTypeViewModel.Items.AddRange(tagTypes
.Select(tt => new SelectListItem
{
Text = tt.Description,
Value = tt.Id.ToString(),
Selected = tt.Id == tag.TagType.Id
}).ToList());
return View(tag);
}
Список выбора имеет один элемент, который имеет Selected=true
, и это не первый элемент. И на моем Edit.cshtml у меня есть:
@model Models.Tag
@Html.DropDownListFor(model => model.TagTypeId,
@Model.TagTypeViewModel.Items,
new { @class = "form-control" })
Моя проблема заключается в том, что генерируемый выпадающий никогда не выбирает элемент, который имеет Selected=true
, он всегда показывает первый элемент.
Я вызываю неправильную перегрузку для DropDownListFor
? Или я строю список избранного неправильно? Или это что-то еще?
Свойство 'Selected'' SelectListItem 'игнорируется при привязке к свойству в вашей модели. Его значение свойства определяет то, что выбрано. Задайте значение «TagTypeId» для значения, которое соответствует одному из ваших вариантов, и оно будет выбрано. –