Заполните @ Html.DropDownListFor данными из ViewModel - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть рабочий код для добавления роли пользователю.Теперь я хочу заменить ввод текста выпадающим списком доступными (всеми) ролями в приложении.Теперь у меня есть html-тег @Html.DropDownListFor, поэтому я создал новую ViewModel, содержащую все нужные мне данные, но теперь я нахожусь в тупике.Я пытаюсь foreach и заполняю данные для каждого элемента в списке, но тогда это не работает.Попытки с @ Htm.DropDownListFor имеют тот же эффект.Может кто-то может показать мне правильный путь, как это сделать?Спасибо!

Контроллер:

  public async Task<IActionResult> AddRoleToUser(string id, string role)
{
   var user = await _userManager.FindByIdAsync(id);

   if (await _roleManager.RoleExistsAsync(role))
   {
      await _userManager.AddToRoleAsync(user, role);
   }

   return RedirectToAction("UserGroups", new { id });
}

ViewModel:

 public class UserGroupsViewModel
 {
    public ApplicationUser ApplicationUser { get; set; }
    public IList<string> RolesList { get; set; }
    public IQueryable<ApplicationRole> AllRoles { get; set; }
 }

Просмотр

@model AdminMVC.Models.Admin.UserGroupsViewModel
@using (Html.BeginForm("AddRoleToUser", "Admin", new { id = Model.ApplicationUser.Id }))
 {
    <div classs="input-group">
       <p><b>Name new role for user:</b></p>
       <input class="form-control form-control-sm" type="text" name="role" placeholder="Role name">
       <span class="input-group-btn">
          <input type="submit" value="Add Role" class="btn btn-primary btn-sm" />
       </span>
    </div>
 }

Мой вопрос был определен как возможный дубликатДругой вопрос.Но я видел этот вопрос и до сих пор не могу это сделать.Могу ли я изменить свой IList на список, содержащий два значения id и строку?И добавить дополнительную позицию в viewmodel для сохранения результата?

1 Ответ

0 голосов
/ 22 февраля 2019

Измените свой список ролей на SelectList и добавьте свойство role:

public SelectList RolesList { get; set; }
public string Role{get;set;}

Создайте SelectList с помощью

model.RolesList = new SelectList(listOfRoles);

Тогда, на ваш взгляд

@Html.DropDownListFor(x => x.Role, Model.RolesList)

Если все в порядке, ваше сообщение должно содержать role заполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...