Отправка таблицы в виде списка в списокПараметр метода - PullRequest
0 голосов
/ 29 октября 2019

Я уверен, что это дубликат, но я не могу найти пример в контексте, который я пытаюсь сделать.

У меня есть список в модели, и у меня есть метод, который должен взять список;однако, когда я пытаюсь передать список из таблицы переднего плана, я получаю Count = 0, и это что-то глупое, что мне не хватает.

Я хочу отправить всю таблицу в виде списка и использовать result = await userManager.AddToRolesAsync(user, model.Where(x => x.IsSelected).Select(y => y.RoleName));, чтобы просмотреть и добавить модели, для которых выбрано значение isSelected. Я открыт для других идей, хотя. Я просто хотел бы избежать JavaScript, если это возможно

Таблица:

  <div class="tab-pane fade" id="roles" role="tabpanel" aria-labelledby="roles-tab">
         <form method="post">
            <div class="wrapper">
              <table class="table table-hover table-md" id="roleTable">
                  <thead>
                     <tr>
                       <td class="text-left tableHead d-none">RoleId</td>
                       <td class="text-left tableHead">Role</td>
                       <td class="text-right tableHead">Delete</td>
                     </tr>
                  </thead>

           @*--Table Body For Each to pull DB records--*@
                  <tbody>
                     @{int i = 0;}
                       @foreach (var role in Model.Roles)
                       {
                        <tr>
                          <td class="d-none">@role.RoleID</td>
                          <td>@role.RoleName</td>
                          <td>
                            <input type="checkbox" asp-for="@role.IsSelected" name="checkbox" id="checkbox@(i)" class="float-right center-box" />
                                <label class="form-check-label d-none" asp-for="@role.IsSelected"></label>                                                                   
                          </td>
                        </tr>
                         i++;
                        }
                   </tbody>
              </table>
             </div>
           <button type="submit" asp-action="ManageUserRoles" asp-controller="Administration" asp-route-userid="@Model.Id" class="btn btn-primary padFloat green">Update</button>
           <a asp-action="UserMaint" class="btn btn-primary padFloat blue">Cancel</a>
       </form>
</div>

Модель:

namespace PortalDev.Models.ViewModels
{
    public class EditUserViewModel
    {

        public EditUserViewModel()
        {
            Claims = new List<Claim>();
            Roles = new List<Role>();
            CompanyLists = new List<CompanyList>();
        }

        //ROLES ---------------------------------------------
        public class Role
        {
            public string RoleName { get; set; }
            public string RoleID { get; set; }
            public bool IsSelected { get; set; }

        }
        public List<Role> Roles { get; set; }

        //CLAIMS----------------------------------------------
        public class Claim
        {
            public string ClaimType { get; set; }
            public string ClaimID { get; set; }
        }
        public List<Claim> Claims { get; set; }

        //User Info---------------------------------------------
        public string Id { get; set; }
        //[Required]
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }                                
    }

}

Метод:

[HttpPost]
        public async Task<IActionResult> ManageUserRoles(List<EditUserViewModel.Role> model, string userid)
        {
            var user = await userManager.FindByIdAsync(userid);

            if (user == null)
            {
                ViewBag.ErrorMessage = $"User with Id = {userid} cannot be found";
                return View("NotFound");
            }

            var roles = await userManager.GetRolesAsync(user); 
            var result = await userManager.RemoveFromRolesAsync(user, roles);

            if (!result.Succeeded)
            {
                ModelState.AddModelError("", "Cannot remove user existing roles");
                return View(model);
            }

            //Only add roles where "is selected" is true to user's list of roles
            result = await userManager.AddToRolesAsync(user,
                    model.Where(x => x.IsSelected).Select(y => y.RoleName));

            if (!result.Succeeded)
            {
                ModelState.AddModelError("", "Cannot remove user existing roles");
                return View(model);
            }

            return RedirectToAction("UserMaint");

        }
...