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日

相关文章

  • 学习从实践开始之jQuery插件开发 对话框插件开发

    接下来我将为你详细讲解“学习从实践开始之jQuery插件开发 对话框插件开发”的完整攻略。 1. 前置知识 在学习jQuery插件开发之前,你需要掌握以下知识: HTML/CSS 基础知识 JavaScript 基础语法 jQuery 基础语法 2. 对话框插件开发步骤 2.1 需求分析 在开始开发对话框插件之前,需要明确插件的需求,例如插件需要实现哪些功能…

    css 2023年6月10日
    00
  • 实用的CSS常见的问题和技巧总结

    实用的CSS常见的问题和技巧总结 一、常见问题的解决方案 1. CSS Reset的作用与实现方式 在不同的浏览器和版本中,元素的样式可能会有所不同。为了解决这个问题,很多开发者会选择使用CSS Reset来重置元素的样式。CSS Reset的主要作用是重置所有元素的样式,使得所有不同的浏览器和版本对元素的解析样式一致,从而保证了页面在不同浏览器和版本中的表…

    css 2023年6月10日
    00
  • 学习js在线html(富文本,所见即所得)编辑器

    学习使用JS在线HTML编辑器,主要涉及以下几个步骤: 第一步:准备项目 创建项目文件夹,命名为“html_editor”,在该文件夹下新建index.html、main.js、style.css三个文件。 在index.html文件中添加必要的HTML结构,主要包括一个textarea元素和一个用于显示编辑结果的div元素。 在main.js文件中编写Ja…

    css 2023年6月10日
    00
  • JavaScript实现表格动态变色

    JavaScript实现表格动态变色的方法如下所示: 使用CSS选取器选择表格需要变色的行或单元格 可以使用CSS的nth-child()伪类选择器,它可以选择表格中的每个行或单元格,然后使用JavaScript改变它的样式。示例代码如下: css /* 隔行变色,红色和蓝色交替 */ tr:nth-child(odd) { background-color…

    css 2023年6月9日
    00
  • 详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法

    详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法 在网页设计中,常常需要控制元素的透明度。CSS 中提供了 opacity 属性来实现透明度的效果,但在 IE 浏览器中,使用 opacity 属性会导致一些问题。因此,也有一种名为“透明度滤镜(filter)”的方式可以用来实现透明度效果。本文将详细讲解这两种方式的最准确用法。 CS…

    css 2023年6月10日
    00
  • js中用cssText设置css样式的简单方法

    下面详细讲解“js中用cssText设置css样式的简单方法”的完整攻略。 什么是cssText 首先让我们了解一下cssText的含义。cssText是一种可以直接设置CSS属性的方法,通过它可以用字符串的形式直接设置元素的样式。在JavaScript中,可以通过元素的style属性来访问和设置cssText。 设置CSS属性 要使用cssText来设置C…

    css 2023年6月9日
    00
  • 三谈Iframe自适应高度代码

    下面是详细讲解“三谈Iframe自适应高度代码”的完整攻略: 1. 什么是Iframe自适应高度代码 Iframe自适应高度代码是为了解决一个Iframe高度无法自适应其内容高度的问题而产生的。在实际开发中,常常遇到一个问题,就是如果Iframe中的内容高度超过了Iframe的高度,那么就会出现滚动条,这样就无法完美地展示Iframe中的内容。因此,我们需要…

    css 2023年6月10日
    00
  • 你真的需要了解一下CSS变量 var()的用法

    当我们设计网站时,经常需要使用相同的颜色、大小、距离等等,这些我们成为“全局变量”。在很多情况下,如果某个全局变量需要修改,我们需要逐一查找和修改每个使用这个变量的地方,这是非常繁琐的,甚至还容易出错。CSS变量 var() 很好地解决了这个问题。 什么是CSS变量 var()? CSS 变量(也称为自定义属性)是一种在使用CSS时定义的新类型属性,它们旨在…

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