【问题标题】:ArgumentNullException: Value cannot be null. (Parameter 'user')ArgumentNullException:值不能为空。 (参数“用户”)
【发布时间】:2021-03-03 19:01:47
【问题描述】:

我的代码基于this 教程有问题。 我试图列出角色并从特定角色中添加或删除用户。

这是我在控制器中的代码:

[HttpPost]
        public async Task<IActionResult> EditUsersInRole(List<UserRoleViewModel> model, string roleId)
        {
            ViewBag.roleId = roleId;

            var role = await roleManager.FindByIdAsync(roleId);

            if (role == null)
            {
                ViewBag.ErrorMessage = $"Role with ID = {roleId} cannot be found.";
                return View("NotFound");
            }

            for (int i = 0; i < model.Count; i++)
            {
                var user = await userManager.FindByIdAsync(model[i].UserId);

                IdentityResult result = null;

                if (model[i].IsSelected && !(await userManager.IsInRoleAsync(user, role.Name)))
                {
                    result = await userManager.AddToRoleAsync(user, role.Name);
                }
                else if (!model[i].IsSelected && await userManager.IsInRoleAsync(user, role.Name))
                {
                    result = await userManager.RemoveFromRoleAsync(user, role.Name);
                }
                else
                {
                    continue;
                }

                if (result.Succeeded)
                {
                    if (i < (model.Count - 1))
                        continue;
                    else
                        return RedirectToAction("EditRole", new { Id = roleId });
                }
            }

            return RedirectToAction("EditRole", new { Id = roleId });
        }

EditUsersInRole 查看代码:

@model List<collector_forum.ViewModels.UserRoleViewModel>

@{ 
    var roleId = ViewBag.roleId;
}

<form method="post">
    <div class="card">
        <div class="card-header">
            <h2>Add or remove users from this role</h2>
        </div>
        <div class="card-body">
            @for (int i = 0; i < Model.Count; i++)
            {
                <div class="form-check m-1">
                    <input asp-for="@Model[i].IsSelected" class="form-check-input" />
                    <label class="form-check-label" asp-for="@Model[i].IsSelected">
                        @Model[i].UserName
                    </label>
                </div>
            }
        </div>
        <div class="card-footer">
            <input type="submit" value="Update" class="btn btn-primary" style="width: auto;" />
            <a asp-action="EditRole" asp-route-id="@roleId" class="btn btn-primary" style="width: auto;">Cancel</a>
        </div>
    </div>
</form>

还有 ViewModel:

namespace collector_forum.ViewModels
{
    public class UserRoleViewModel
    {
        public string UserId { get; set; }
        public string UserName { get; set; }
        public bool IsSelected { get; set; }
    }
}

然后我得到了这个错误:

ArgumentNullException:值不能为空。 (参数“用户”)

出现错误Error

我现在很无助

请帮帮我。

//编辑。

发帖前的 HTML 视图 - screenshot

Chrome 开发者工具 -> 网络标签before 点击“更新”

然后点击“更新”view

【问题讨论】:

  • 不太确定,但我猜你的“var user = await userManager.FindByIdAsync”返回 null
  • 这能回答你的问题吗? What is a NullReferenceException, and how do I fix it? 是的,我知道这是一个不同的异常类型,原理是一样的
  • 您能否在发布前显示此视图的 EditUsersInRole 视图和屏幕截图?
  • Chrome 开发者工具 -> 网络标签。向我们展示正在发布的确切有效负载。我的蜘蛛侠感觉里面没有 ID。

标签: c# asp.net asp.net-mvc argumentnullexception


【解决方案1】:

您忘记发送 UserId 并且您得到一个空用户

    <div class="card-body">
        @for (int i = 0; i < Model.Count; i++)
        {
            <div class="form-check m-1">
                <input type="hidden" asp-for="@Model[i].UserId" />
                <input asp-for="@Model[i].IsSelected" class="form-check-input" />
                <label class="form-check-label" asp-for="@Model[i].IsSelected">
                    @Model[i].UserName
                </label>
            </div>
        }
    </div>

【讨论】:

  • 效果很好!我是 ASP.Net 的新手。感谢您的帮助!
  • 随时!很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2021-10-09
相关资源
最近更新 更多