Я пытаюсь создать DropDownList для каждой записи в таблице в представлении. У меня возникли проблемы с установкой выбранного значения для раскрывающегося списка.Невозможно изменить выбранное значение для SelectList - MVC
В контроллере список пользователей каждого пользователя в модели заполняется вызовом метода в репозитории. Кажется, я не могу получить этот метод совершенно правильно. Я могу изменить выбранное значение для элемента, а accessLevels имеет правильное значение. Но в представлении это не выбранное значение. Как установить выбранное значение для выбранного списка?
Я попытался это:
Repository:
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 Constr uctor (IEnumerable, Object), правильно? Или что еще мне не хватает? Я пытался google, но до сих пор не понимаю, что я делаю неправильно. Я посмотрел на этот вопрос SelectList Selected Value Issue - Stack Overflow, но это не работает.
Update:
это модель:
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; }
}
Update 2:
Я получил это работает сейчас и обновили свою модель и репозиторий.
Модель:
public class EditCustomerViewModel
{
public Customer Customer { get; set; }
public int CustomerID { get; set; }
public List<UserToView> UsersToView { get; set; }
}
Repository:
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' –
. Модели просмотра никогда не должны содержать модели данных при редактировании. –
AccessLevelsWithSelectedItem является свойством каждого пользователя в проете UserToView в модели, и это свойство, к которому я пытаюсь привязаться. Должен ли я помещать «AccessLevelsWithSelectedItem» в качестве первого аргумента строки в раскрывающемся списке или я пропустил его? – user3215947