这篇攻略主要讲解如何在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技术站