asp.net core 2.0 Web简单使用:四、用户列表、添加、删除

继续,之前做的是用户注册登录。但是没有管理用户的地方,简单做一个列表,添加和删除功能。


右键点击Controllers目录,选择添加控制器



选择EF的MVC控制器



选择模型类型是ApplicationUser,选择数据上下文类是ApplicationDbContext类,控制器名称会自动生成,然后确定。



开始重写新增用户的内容

添加新的模型

在Models目录下新增ApplicationUserViewModels目录



添加CreateViewModel类

其中,Roles是用来返回当前选中哪些权限

using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace RCKohi.Models.ApplicationUsersViewModels
{
    public class CreateViewModel
    {
        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "用户名")]
        public string UserName { get; set; }

        [EmailAddress]
        [Display(Name = "电子邮箱")]
        public string Email { get; set; }

        [Phone]
        [Display(Name = "电话")]
        public string PhoneNumber { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "{0} 必须多于 {2} 位并且少于 {1} 位。", MinimumLength = 6)]
        [DataType(DataType.Text)]
        [Display(Name = "密码")]
        public string Password { get; set; }

        [Display(Name = "权限")]
        public IList<string> Roles { get; set; }
    }
}

修改视图,将控制器传过来的RolesList变成多选框
@model RCKohi.Models.ApplicationUsersViewModels.CreateViewModel

@{
    ViewData["Title"] = "用户管理";
    Layout = "~/Views/Shared/_LayoutSbAdmin2.cshtml";
}
<div class="row">
    <div class="col-lg-12">
        <div class="panel panel-default">
            <div class="panel-heading">新增用户</div>
            <div class="panel-body">
                <form role="form" asp-action="Create">
                    <div class="form-group">
                        <label asp-for="UserName" class="control-label"></label>
                        <input asp-for="UserName" class="form-control" />
                        <span asp-validation-for="UserName" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="Email" class="control-label"></label>
                        <input asp-for="Email" class="form-control" />
                        <span asp-validation-for="Email" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="PhoneNumber" class="control-label"></label>
                        <input asp-for="PhoneNumber" class="form-control" />
                        <span asp-validation-for="PhoneNumber" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="Password" class="control-label"></label>
                        <input asp-for="Password" class="form-control" />
                        <span asp-validation-for="Password" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label>用户权限</label>
                        <div class="checkbox">
                            @foreach (var item in (SelectList)ViewBag.RolesList)
                            {
                                <label class="checkbox-inline">
                                    <input type="checkbox" name="selectedRoles" value="@item.Value" />
                                    @item.Text
                                </label>
                            }
                        </div>
                    </div>
                    <div class="form-group">
                        <div asp-validation-summary="All" class="text-danger"></div>
                    </div>
                    <div class="form-group">
                        <button type="submit" class="btn btn-primary" data-toggle="tooltip" data-placement="bottom" title="新增"><i class="fas fa-plus-circle"></i>&nbsp;&nbsp;新增用户</button>
                        <a asp-action="Index" class="btn btn-success" data-toggle="tooltip" data-placement="bottom" title="列表"><i class="far fa-list-alt"></i>&nbsp;&nbsp;返回列表</a>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>


@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

修改ApplicationUsersController控制器

首先在定义处增加注入

        private readonly ApplicationDbContext _context;
        private readonly UserManager<ApplicationUser> _userManager;
        private readonly RoleManager<IdentityRole> _roleManager;


        public ApplicationUsersController(
        ApplicationDbContext context,
        UserManager<ApplicationUser> userManager,
        RoleManager<IdentityRole> roleManager
        )
        {
            _context = context;
            _userManager = userManager;
            _roleManager = roleManager;
        }

修改控制器的Create方法

在获取页面的时候,用ViewBag.RolesList把所有权限返回给页面

        // GET: ApplicationUsers/Create
        public async Task<IActionResult> Create()
        {
            ViewBag.RolesList = new SelectList(await _roleManager.Roles.ToListAsync(), "Name", "NormalizedName");
            return View();
        }


        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create(CreateViewModel model, string returnUrl = null, params string[] selectedRoles)
        {
            ViewData["ReturnUrl"] = returnUrl;
            if (ModelState.IsValid)
            {
                if (model.Email == null)
                {
                    model.Email = "5140075@qq.com";
                }
                var user = new ApplicationUser { UserName = model.UserName, Email = model.Email, PhoneNumber = model.PhoneNumber };
                var userResult = await _userManager.CreateAsync(user, model.Password);
                if (userResult.Succeeded)
                {
                    if (selectedRoles != null)
                    {
                        var roleResult = await _userManager.AddToRolesAsync(user, selectedRoles);
                        if (roleResult.Succeeded)
                        {
                            return RedirectToAction(nameof(Index));
                        }
                        foreach (var error in roleResult.Errors)
                        {
                            ModelState.AddModelError(string.Empty, error.Description);
                        }
                    }
                    //return RedirectToAction(nameof(Index));
                }


                foreach (var error in userResult.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }
            // If we got this far, something failed, redisplay form
            return View(model);
        }
这个时候就可以正确添加用户了。

再添加一个ViewModel用于显示详细信息和编辑用户用


using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace RCKohi.Models.ApplicationUsersViewModels
{
    public class UserViewModel
    {
        [Display(Name = "用户ID")]
        public string Id { get; set; }

        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "用户名")]
        public string UserName { get; set; }

        [EmailAddress]
        [Display(Name = "电子邮箱")]
        public string Email { get; set; }

        [Phone]
        [Display(Name = "电话")]
        public string PhoneNumber { get; set; }

        [Display(Name = "权限")]
        public IList<string> Roles { get; set; }
    }
}

之后依次修改显示信息,删除和编辑的视图,并修改控制器。

修改用户的时候,先把当前用户所有权限清除,如果当前选择权限不为空则添加权限。

删除用户的时候,先删除权限,再删除用户。






最后,为控制器添加权限控制注解

namespace RCKohi.Controllers
{
    [Authorize]
    public class ApplicationUsersController : Controller
    {

把不用的方法注释掉,这样,一个简单的用户登录,并且带后台管理用户的小战点就OK了


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值