ASP.NET MVC5网站开发之添加、删除、重置密码、修改密码、列表浏览管理员篇2(六)

这篇攻略主要讲解如何在ASP.NET MVC5网站中添加、删除、重置密码、修改密码以及列表浏览管理员。下面将一步一步详细讲解。

1. 添加管理员

添加管理员需要创建一个表单,其中包括如下字段:用户名、密码、电子邮件和角色。首先,我们需要在标记为AllowAnonymous的 HomeController中添加如下代码,以创建表单视图:

// 返回添加管理员表单视图
public ActionResult AddAdmin()
{
    return View();
}

接下来,创建AddAdmin视图并将表单元素添加到视图中:

@using (Html.BeginForm("AddAdmin", "Admin", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()

    <div class="form-group">
        @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.UserName)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.Password)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.Email)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(m => m.Role, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.DropDownListFor(m => m.Role, ViewBag.RoleList as SelectList, new { @class = "form-control" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <button type="submit" class="btn btn-default">添加管理员</button>
        </div>
    </div>
}

接着在AdminController中添加如下代码以处理表单提交事件:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> AddAdmin(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            // 添加角色
            await UserManager.AddToRoleAsync(user.Id, model.Role);
            return RedirectToAction("Index", "Admin");
        }
        AddErrors(result);
    }

    // 如果到达此处,则发生了某些错误,请将模型状态添加到视图中以显示验证错误
    ViewBag.RoleList = new SelectList(RoleManager.Roles.ToList(), "Name", "Name");
    return View(model);
}

2. 删除管理员

在AdminController中,添加如下代码以删除管理员:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Delete(string id)
{
    var user = await UserManager.FindByIdAsync(id);
    if (user != null)
    {
        var result = await UserManager.DeleteAsync(user);
        if (result.Succeeded)
        {
            return RedirectToAction("Index", "Admin");
        }
        AddErrors(result);
    }
    else
    {
        ModelState.AddModelError("", "找不到该管理员");
    }

    return View("Error");
}

在Admin视图中,添加如下代码以显示删除按钮:

@foreach (var user in Model)
{
    <tr>
        <td>
            @user.UserName
        </td>
        <td>
            @user.Email
        </td>
        <td>
            @foreach (var role in UserManager.GetRoles(user.Id))
            {
                <span class="label label-success">@role</span>
            }
        </td>
        <td>
            @Html.ActionLink("修改密码", "ResetPassword", new { userId = user.Id }, new { @class = "btn btn-primary btn-xs" }) |
            @Html.ActionLink("删除", "Delete", new { id = user.Id }, new { @class = "btn btn-danger btn-xs" })
        </td>
    </tr>
}

示例说明

示例1:在添加管理员时,添加一个角色下拉列表,以便用户选择该管理员的角色。在AddAdmin视图中,使用@Html.DropDownListFor()来生成一个下拉列表并将其绑定到model.Role属性。在Admin视图中,使用foreach循环来显示每个管理员的角色。

<div class="form-group">
    @Html.LabelFor(m => m.Role, new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
        @Html.DropDownListFor(m => m.Role, ViewBag.RoleList as SelectList, new { @class = "form-control" })
    </div>
</div>
<td>
    @foreach (var role in UserManager.GetRoles(user.Id))
    {
        <span class="label label-success">@role</span>
    }
</td>

示例2:添加管理员成功,将其带回管理员列表页面。在AddAdmin方法中,使用RedirectToAction方法将用户重定向到Admin控制器的Index操作中。

if (result.Succeeded)
{
    await UserManager.AddToRoleAsync(user.Id, model.Role);
    return RedirectToAction("Index", "Admin");
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET MVC5网站开发之添加、删除、重置密码、修改密码、列表浏览管理员篇2(六) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript Element对象

    Element对象是JavaScript中DOM(文档对象模型) API的核心对象之一。该对象代表了HTML或XML文档中的一个元素节点。Element对象提供了许多属性和方法,可以访问和操作元素节点的各种属性和特征,例如元素的标签名、类名、ID、样式、子节点等等。 以下是Element对象的一些常用属性和方法: 属性: element.tagName:返回…

    Web开发基础 2023年3月30日
    00
  • CSS伪类和伪元素的区别详解

    首先我们需要了解“CSS伪类”和“CSS伪元素”的概念。 什么是CSS伪类? CSS伪类是一种用于选择HTML元素特定状态的CSS选择器。伪类通常以冒号(:)作为开头,常用的伪类有:hover、:active、:focus等。 例如,以下代码将在鼠标经过链接时改变链接文字颜色: a:hover{ color: red; } 什么是CSS伪元素? CSS伪元素…

    css 2023年6月10日
    00
  • js设置文字颜色的方法示例

    “js设置文字颜色的方法示例”包含以下几个部分: 1. 设置文字颜色的CSS属性 在CSS中,可以使用color属性来设置文字的颜色,语法如下: color: value; 其中value可以是颜色值(如red、#000000等)、rgb值(如rgb(255, 0, 0))、hsl值(如hsl(0, 100%, 50%))等。 在JavaScript中,可以…

    css 2023年6月9日
    00
  • 使用Vue制作图片轮播组件思路详解

    这里我可以给出使用Vue制作图片轮播组件的详细攻略: 思路概述 实现图片轮播组件的主要思路如下: 确定组件的基本结构和样式 定义轮播动画效果和过渡方式 通过Vue组件化思想,定义图片轮播组件 将组件引入主页面并使用 组件结构和样式设计 在组件设计中,我们可以定义一个父容器元素,内部包含图片、左右箭头和指示器。具体结构和样式可以参考以下代码: <temp…

    css 2023年6月10日
    00
  • 简单明了带你了解CSS Modules

    简单明了带你了解CSS Modules CSS Modules是一种用于解决CSS全局作用域问题的技术。它可以将CSS样式文件中的类名和选择器进行局部作用域,避免了全局作用域带来的样式冲突问题。本攻略将详细讲解CSS Modules的原理、使用方法和示例。 CSS Modules的原理 CSS Modules的原理是通过在类名和选择器前添加哈希值,将它们进行…

    css 2023年5月18日
    00
  • 多行图片hover加边框会把下面的图片挤到别处的解决方法

    针对“多行图片hover加边框会把下面的图片挤到别处”的问题,我们可以采取以下两种方法来解决。 方法一:为图片加上占位符 我们可以在HTML中为每个图片设置一个确定的大小,并填充占位符。这样可以确保在图片hover加边框时,不会引起其他图片位置的变化。 假设我们有以下的HTML代码: <div class="image-container&q…

    css 2023年6月10日
    00
  • CSS常用的封装方法汇总

    CSS常用的封装方法汇总 简介 在进行网页布局与美化的过程中,CSS是必不可少的一门技术。然而,CSS编写的过程中也常常会遇到一些问题,例如追求代码的简洁与可维护性,需要完成重复的操作,希望提高效率等等。针对这些问题,我们可以采用各种CSS封装方法来提高我们的编码效率并增强代码质量。 CSS封装方法 1. 常规类名封装 常规类名封装即为根据具体样式给出相应的…

    css 2023年6月10日
    00
  • css语法结构

    下面是关于CSS语法结构的详细讲解,希望能够帮到您。 CSS语法结构 CSS是一种用于描述网页上样式和布局的语言。它使用一种名为“CSS规则”的结构来定义样式。每个CSS规则由选择器和一组声明块组成。 CSS规则的基本结构 一个典型的CSS规则由三部分组成: selector { property: value; } 其中,selector表示一组元素需要设…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部