Я пытаюсь создать DropDownList для каждой записи в таблице в представлении. Мне не удается установить выбранное значение для раскрывающегося списка.
В контроллере список уровней доступа каждого пользователя в модели заполняется путем вызова метода в репозитории. Кажется, я не могу правильно понять этот метод. Я могу изменить выбранное значение для элемента, и для accessLevels выбрано правильное значение. Но в представлении это не выбранное значение. Как я могу установить выбранное значение в списке выбора?
Я пробовал это:
Репозиторий:
public IEnumerable<SelectListItem> GetSelectListAccessLevelsWithSelectedItem(string selectedAccessLevelID)
{
IEnumerable<SelectListItem> accessLevelsFromDB = DB.AccessLevels
.Select(x => new SelectListItem
{
Value = x.AccessLevelID.ToString(),
Text = x.Name
});
SelectListItem item = null;
foreach (SelectListItem a in accessLevelsFromDB)
{
if (a.Value == selectedAccessLevelID)
{
item = a;
a.Selected = true;
}
}
var accessLevels = new SelectList(accessLevelsFromDB, item.Value);
return accessLevels;
}
А также попытался вернуть accessLevelsFromDB:
return accessLevelsFromDB;
Вид:
@Html.DropDownList("Accesslevels", user.AccessLevelsWithSelectedItem, new { @class = "form-control", @name = "accessLevels"})
Правильно ли я использовал SelectList Constructor (IEnumerable, Object)? Или что еще мне не хватает? Я пытался погуглить, но все еще не понимаю, что делаю не так. Я посмотрел на этот вопрос SelectList Selected Value Issue - Stack Overflow, но это не так » кажется, не работает.
Обновлять:
это модель:
public class EditCustomerViewModel
{
public Customer Customer { get; set; }
public int CustomerID { get; set; }
public List<User> Users { get; set; }
public List<UserToView> UsersToView { get; set; }
public IEnumerable<SelectListItem> AccessLevelListForSelectedUser { get; set; }
}
Обновление 2:
Теперь он работает, и я обновил свою модель и репозиторий.
Модель:
public class EditCustomerViewModel
{
public Customer Customer { get; set; }
public int CustomerID { get; set; }
public List<UserToView> UsersToView { get; set; }
}
Репозиторий:
public IEnumerable<SelectListItem> GetSelectListAccessLevelsWithSelectedItem(string selectedAccessLevelID)
{
IEnumerable<SelectListItem> accessLevelsFromDB = DB.AccessLevels
.Select(x => new SelectListItem
{
Value = x.AccessLevelID.ToString(),
Text = x.Name,
Selected = x.AccessLevelID.ToString() == selectedAccessLevelID
});
return accessLevelsFromDB;
}
Accesslevels
, поэтому вы даже ни к чему не привязываетесь. И вы не устанавливаете свойствоSelected
дляSelectListItem
при привязке к свойству (это значение свойства, которое определяет, что выбрано (внутренне метод строит свой собственный список SelectList). Иvar accessLevels = new SelectList(accessLevelsFromDB, item.Value);
не имеет смысла, потому чтоaccessLevelsFromDB
уже являетсяSelectList
- person   schedule 19.10.2016Selected
игнорируется методомDropDownList()
, если вы не привязываетесь к свойству - а в вашем случае это не так (оно не будет привязано к вашей модели при отправке). И я рекомендую вам прочитать MVC5 Razor html.dropdownlist для набора, выбранного, когда значение находится в массиве - person   schedule 19.10.2016