Я уверен, что это дубликат, но я не могу найти пример в контексте, который я пытаюсь сделать.
У меня есть список в модели, и у меня есть метод, который должен взять список;однако, когда я пытаюсь передать список из таблицы переднего плана, я получаю 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");
}