编辑用户角色时的问题

问题描述 投票:0回答:2

我正在按照一本告诉你如何编辑用户角色的书来做。一切都很顺利,直到我看到一行代码。我认为这将是一个非常简单的解决方案,然而,我无法理解它。

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

上面那行代码返回了一个错误。

"Argument 2: cannot convert from 'string[]' to '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();


        }

编辑用户视图模型

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; }


    }

编辑用户视图

<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>
c# asp.net-mvc model-view-controller
2个回答
0
投票

如果你想转换为字符串,你可以使用 String.Join 并使用string.Empty、null或任何你想要的分隔符作为分隔符,但会包含在你的字符串中。

string str = string.Join(string.Empty, yourArray)

0
投票

这是书中的一个错别字,或者从书中复制时的错别字,应该是:"空"、"空 "或任何你想要的分隔符,但会包含在你的字符串中。应该是这样的。

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

应该是: AddToRolesAsync 需要 IEnumerable<string> 作为其第二个参数。AddToRoleAsync 取一个字符串。

© www.soinside.com 2019 - 2024. All rights reserved.