Проблема при редактировании роли пользователя - PullRequest
0 голосов
/ 26 мая 2020

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

var result = await _userManager.AddToRoleAsync(user.Id,
                    selectedRole.Except(userRoles).ToArray<string>());

Строка кода выше возвращает ошибку:

"Аргумент 2: невозможно преобразовать из 'string []' в 'string' "

В книге это показывает:

.ToArray<string>

Однако в моей строке кода он просто сообщает мне для рефакторинга:

.ToArray());

Есть ли другой способ преобразования в строку? Я отправлю код ниже, спасибо.

ИЗМЕНИТЬ КОД ПОЛЬЗОВАТЕЛЯ

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> EditUser(EditUserViewModel model, params string[]  selectedRole)
        {
            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByIdAsync(model.Id);

                if (user == null)
                {
                    return HttpNotFound();
                }

                user.UserName = model.UserName;
                user.FirstName = model.FirstName;
                user.LastName = model.LastName;

                var userRoles = await _userManager.GetRolesAsync(user.Id);

                selectedRole = selectedRole ?? new string[] { };

                var result = await _userManager.AddToRoleAsync(user.Id,
                    selectedRole.Except(userRoles).ToArray<string>()); // may not be right

                if (!result.Succeeded)
                {
                    ModelState.AddModelError("", result.Errors.First());
                    return View();
                }

                result = await _userManager.RemoveFromRoleAsync(user.Id, userRoles.Except(selectedRole).ToArray().ToString()); // put to string

                if (!result.Succeeded)
                {
                    ModelState.AddModelError("", result.Errors.First());
                    return View();
                }

                return RedirectToAction("Index");

            }

            ModelState.AddModelError("", "Something's failed.");
            return View();


        }

EditUserViewModel

public class EditUserViewModel
    {

            public string Id { get; set; }


            [Required]
            [Display(Name = "Username")]
            public string UserName { get; set; }

            [Required(AllowEmptyStrings = false)]
            [Display(Name = "Email")]
            [EmailAddress]
            public string Email { get; set; }
            [Required]
            [Display(Name = "First Name")]
            [StringLength(50)]
            public string FirstName { get; set; }
            [Required]
            [Display(Name = "Last Name")]
            [StringLength(50)]
            public string LastName { get; set; }


            public IEnumerable<SelectListItem> RolesList { get; set; }


    }

EditUser View

<div class="form-group">
        @Html.Label("Roles", new { @class = "control-label col-md-2" })
        <span class="col-md-10">
            @foreach (var item in Model.RolesList)
            {
                <input type="checkbox" name="SelectedRole" value="@item.Value"
                       checked="@item.Selected" class="checkbox-inline" />

                       @Html.Label(item.Value, new { @class = "control-label" })
            }

          </span>
       </div>

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Опечатка в книге или при копировании с книги. Это должно быть:

var result = await _userManager.AddToRolesAsync(user.Id,
                selectedRole.Except(userRoles).ToArray<string>()); 

AddToRolesAsync принимает IEnumerable<string> в качестве второго параметра, AddToRoleAsync принимает строку.

0 голосов
/ 26 мая 2020

Если вы хотите преобразовать в строку, вы можете использовать String.Join , а в качестве разделителя использовать string.Empty, null или любой другой разделитель, который вы хотите, но будет включен в вашу строку.

string str = string.Join(string.Empty, yourArray)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...