ASP.NET MVC5网站开发之用户角色的后台管理1(七)

时间:2022-03-17 16:04:53

角色是网站中都有的一个功能,用来区分用户的类型、划分用户的权限,这次实现角色列表浏览、角色添加、角色修改和角色删除。

一、业务逻辑层

1、角色模型

Ninesky.Core【右键】->添加->类,输入类名Role。

引用System.ComponentModel.DataAnnotations命名空间

  1. using System.ComponentModel.DataAnnotations; 
  2.  
  3. namespace Ninesky.Core 
  4.  /// <summary> 
  5.  /// 角色 
  6.  /// </summary> 
  7.  public class Role 
  8.  { 
  9.   [Key] 
  10.   public int RoleID { get; set; } 
  11.  
  12.   /// <summary> 
  13.   /// 名称 
  14.   /// </summary> 
  15.   [Required(ErrorMessage ="必须输入{0}")] 
  16.   [StringLength(20,MinimumLength =2, ErrorMessage ="{0}长度为{2}-{1}个字符")] 
  17.   [Display(Name ="名称")] 
  18.   public string Name { get; set; } 
  19.  
  20.   /// <summary> 
  21.   /// 说明 
  22.   /// </summary> 
  23.   [StringLength(1000, ErrorMessage = "{0}必须少于{1}个字符")] 
  24.   [Display(Name = "说明")] 
  25.   public string Description { get; set; } 
  26.  
  27.  } 

2、添加表映射

打开Ninesky.Core/NineskyContext.cs,添加Role表映射

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

3、迁移数据

1)、启用数据迁移

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

在【工具栏】->【工具】->NuGet包管理器->程序包管理器控制台。

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

输入命令 Enable-Migrations 回车,为Ninesk.Core启用数据迁移。

打开Ninesky.Core/Migrations/Configuration.cs文件

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

将 AutomaticMigrationsEnabled = false;改为 AutomaticMigrationsEnabled = ture;来启用自动迁移。

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

2)、更新数据表

运行命令Update-Database。提示错误:There is already an object named 'Administrators' in the database.

这是因为先生成了Administrators表后启用的数据迁移。在更新表的时候视图创建Administrators表失败。

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

打开服务器资源管理器,如图选择Administrators【右键】->删除。

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

删除成功后再次运行Update-Database,执行成功。

因为刚才删除表的时候把管理员账号也删掉了,记得打开Administrators表添加一个管理员账号,记得密码可以输入jZae727K08KaOmKSgOaGzww/XVqGr/PKEgIMkjrcbJI= 这是123456加密后的字符串。

4、角色管理

Ninesky.Core【右键】->添加->类,输入类名RoleManager,类继承自BaseManager<Role>

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Threading.Tasks; 
  6.  
  7. namespace Ninesky.Core 
  8.  /// <summary> 
  9.  /// 角色管理 
  10.  /// </summary> 
  11.  public class RoleManager:BaseManager<Role> 
  12.  { 
  13.  } 
 

二、展示层

Ninesky.Web/Areas/Control/Controllers【右键】->添加->控制器。选择 MVC5 控制器 – 空, 输入控制器名称RoleController。

在控制器中引入命名空间Ninesky.Core;

添加变量private RoleManager roleManager = new RoleManager();

为控制器添加身份验证[AdminAuthorize]

1、消息提示

在进行操作的时候经常会需要对操作成功、失败、发生错误进行提示,所以专门做一个提示的模型类Prompt。

1)、添加类

Ninesky.Web/Models【右键】->添加->类  输入类名Prompt

 

复制代码 代码如下:
using System.Collections.Generic;namespace Ninesky.Web.Models{ /// <summary> /// 提示 /// </summary> public class Prompt { /// <summary> /// 标题 /// </summary> public string Title { get; set; } /// <summary> /// 消息 /// </summary> public string Message { get; set; } /// <summary> /// 按钮组 /// </summary> public List<string> Buttons { get; set; } }}

 

2、在控制器中引入类的命名空间

在Rolecontroller中引用命名空间Ninesky.Web.Models。

3、添加视图

在Ninesky.Web/Areas/Control/Views/Shared【右键】->添加->视图

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

  1. @model Ninesky.Web.Models.Prompt 
  2.  
  3. @{ 
  4.  ViewBag.Title = Model.Title; 
  5.  
  6. @section SideNav{@Html.Partial("SideNavPartialView")} 
  7.  
  8. <ol class="breadcrumb"
  9.  <li><span class="glyphicon glyphicon-home"></span> @Html.ActionLink("首页""Index""Home")</li> 
  10.  <li class="active">@Model.Title</li> 
  11. </ol> 
  12.  
  13. <div class="panel panel-default"
  14.  <div class="panel-heading"><div class="panel-title">@Model.Title</div></div> 
  15.  <div class="panel-body"
  16.   <p>@Html.Raw(Model.Message)</p> 
  17.   @if(Model.Buttons!=null && Model.Buttons.Count > 0) { 
  18.   <p> 
  19.    @foreach(var item in Model.Buttons) 
  20.    { 
  21.     @Html.Raw(item+ "  "
  22.  
  23.    } 
  24.   </p> 
  25.   } 
  26.  </div> 
  27. </div> 

2、管理员列表

1)、返回列表方法(Json方式)

在控制中添加方法 ListJson() ,返回类型 JsonResoult

  1. /// <summary> 
  2.   /// 列表【Json】 
  3.   /// </summary> 
  4.   /// <returns></returns> 
  5.   public JsonResult ListJson() 
  6.   { 
  7.    return Json(roleManager.FindList()); 
  8.   } 

2、添加角色首页视图

在index()方法【右键】->添加视图

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

 

  1. @{ 
  2.  ViewBag.Title = "角色管理"
  3.  
  4. @section SideNav{@Html.Partial("SideNavPartialView")} 
  5.  
  6. <ol class="breadcrumb"
  7.  <li><span class="glyphicon glyphicon-home"></span> @Html.ActionLink("首页""Index""Home")</li> 
  8.  <li>@Html.ActionLink("用户管理""Index""User")</li> 
  9.  <li class="active">@Html.ActionLink("角色管理""Index""Role")</li> 
  10. </ol> 
  11.  
  12. <table id="admingrid"></table> 
  13. @section style{ 
  14.  @Styles.Render("~/Content/bootstrapplugincss"
  15.  
  16. @section scripts{ 
  17.  @Scripts.Render("~/bundles/jqueryval"
  18.  @Scripts.Render("~/bundles/bootstrapplugin"
  19.  <script type="text/javascript"
  20.   $(document).ready(function () { 
  21.    //表格 
  22.    var $table = $('#admingrid'); 
  23.    $table.bootstrapTable({ 
  24.     showRefresh: true
  25.     showColumns: true
  26.     showFooter: true
  27.     method: "post"
  28.     url: "@Url.Action("ListJson")"
  29.     columns: [ 
  30.      { title: "ID", field: "RoleID" }, 
  31.      { title: "名称", field: "Name", formatter: function (value, row, index) { return "<a href='@Url.Action("Modify", "Role")/" + row.RoleID + "'>" + value + "</a>" } }, 
  32.      { title: "说明", field: "Description" }, 
  33.      { title: "操作", field: "RoleID", formatter: function (value) { return "<a class='btn btn-sm btn-danger' data-operation='deleterole' data-value='" + value + "'>删除</a>" } } 
  34.     ], 
  35.     onLoadSuccess: function () { 
  36.      //删除按钮 
  37.      $("a[data-operation='deleterole']").click(function () { 
  38.       var id = $(this).attr("data-value"); 
  39.       BootstrapDialog.confirm("你确定要删除" + $(this).parent().parent().find("td").eq(1).text() + "吗?"function (result) { 
  40.        if (result) { 
  41.         $.post("@Url.Action("DeleteJson", "Role")", { id: id }, function (data) { 
  42.          if (data.Code == 1) { 
  43.           BootstrapDialog.show({ 
  44.            message: "删除角色成功"
  45.            buttons: [{ 
  46.             icon: "glyphicon glyphicon-ok"
  47.             label: "确定"
  48.             action: function (dialogItself) { 
  49.              $table.bootstrapTable("refresh"); 
  50.              dialogItself.close(); 
  51.             } 
  52.            }] 
  53.  
  54.           }); 
  55.          } 
  56.          else BootstrapDialog.alert(data.Message); 
  57.         }, "json"); 
  58.        } 
  59.       }); 
  60.      }); 
  61.      //删除按钮结束 
  62.     } 
  63.    }); 
  64.    //表格结束 
  65.   }); 
  66.  </script> 

3、导航视图

导航视图显示在视图的左侧,对该控制器下的功能进行导航

Ninesky.Web/Areas/Control/Views/Role【右键】->添加->视图

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

  1. <div class="panel panel-default"
  2.  <div class="panel-heading"
  3.   <div class="panel-title"><span class="glyphicon glyphicon-user"></span> 用户管理</div> 
  4.  </div> 
  5.  <div class="panel-body"
  6.   <div class="list-group"
  7.    <div class="list-group-item"><span class="glyphicon glyphicon-plus"></span> @Html.ActionLink("角色添加""Add""Role")</div> 
  8.    <div class="list-group-item"><span class="glyphicon glyphicon-list"></span> @Html.ActionLink("角色管理""Index""Role")</div> 
  9.   </div> 
  10.  </div> 
  11. </div> 

4、添加角色

1)、添加方法

在控制器中添加Add方法

 

复制代码 代码如下:
/// <summary> /// 添加 /// </summary> /// <returns></returns> public ActionResult Add() { return View(); }

 

2)、添加视图

在方法上右键添加视图

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

 

  1. @model Ninesky.Core.Role 
  2.  
  3. @{ 
  4.  ViewBag.Title = "添加角色"
  5.  
  6. @section SideNav{@Html.Partial("SideNavPartialView")} 
  7.  
  8. <ol class="breadcrumb"
  9.  <li><span class="glyphicon glyphicon-home"></span> @Html.ActionLink("首页""Index""Home")</li> 
  10.  <li>@Html.ActionLink("用户管理""Index""User")</li> 
  11.  <li>@Html.ActionLink("角色管理""Index""Role")</li> 
  12.  <li class="active">添加角色</li> 
  13. </ol> 
  14.  
  15. @using (Html.BeginForm()) 
  16.  @Html.AntiForgeryToken() 
  17.   
  18.  <div class="form-horizontal"
  19.   @Html.ValidationSummary(true""new { @class = "text-danger" }) 
  20.   <div class="form-group"
  21.    @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
  22.    <div class="col-md-10"
  23.     @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
  24.     @Html.ValidationMessageFor(model => model.Name, ""new { @class = "text-danger" }) 
  25.    </div> 
  26.   </div> 
  27.  
  28.   <div class="form-group"
  29.    @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" }) 
  30.    <div class="col-md-10"
  31.     @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } }) 
  32.     @Html.ValidationMessageFor(model => model.Description, ""new { @class = "text-danger" }) 
  33.    </div> 
  34.   </div> 
  35.  
  36.   <div class="form-group"
  37.    <div class="col-md-offset-2 col-md-10"
  38.     <input type="submit" value="保存" class="btn btn-default" /> 
  39.    </div> 
  40.   </div> 
  41.  </div> 
  42.  
  43. @section Scripts { 
  44.  @Scripts.Render("~/bundles/jqueryval"

3)、添加提交数据的接收处理方法

在控制器中添加Add方法的post方法

  1. [HttpPost] 
  2.   [ValidateAntiForgeryToken] 
  3.   public ActionResult Add(Role role) 
  4.   { 
  5.    if (ModelState.IsValid) 
  6.    { 
  7.     if (roleManager.Add(role).Code == 1) 
  8.     { 
  9.      return View("Prompt"new Prompt() { Title = "添加角色成功"
  10.       Message ="你已成功添加了角色【"+ role.Name+"】"
  11.       Buttons = new List<string>() { "<a href="" + Url.Action("Index", "Role") + "" class="btn btn-default">角色管理</a>""<a href="" + Url.Action("Add", "Role") + "" class="btn btn-default">继续添加</a>"
  12.      }); 
  13.     } 
  14.    } 
  15.    return View(role); 
  16.   } 

5、管理员资料修改

1)、添加方法

在控制器中添加Modify方法。

  1. /// <summary> 
  2.   /// 修改 
  3.   /// </summary> 
  4.   /// <param name="id">RoleID</param> 
  5.   /// <returns></returns> 
  6.   public ActionResult Modify(int id) 
  7.   { 
  8.    var _role = roleManager.Find(id); 
  9.    if(_role == nullreturn View("Prompt"new Prompt() 
  10.    { 
  11.     Title = "错误"
  12.     Message = "ID为【" + id + "】的角色不存在"
  13.     Buttons = new List<string>() { "<a href="" + Url.Action("Index", "Role") + "" class="btn btn-default">角色管理</a>"
  14.    }); 
  15.    return View(_role); 
  16.   } 

2)、添加视图

在方法中右键添加视图

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

代码如下:

  1. @model Ninesky.Core.Role 
  2.  
  3. @{ 
  4.  ViewBag.Title = Model.Name; 
  5.  
  6. @section SideNav{@Html.Partial("SideNavPartialView")} 
  7.  
  8. <ol class="breadcrumb"
  9.  <li><span class="glyphicon glyphicon-home"></span> @Html.ActionLink("首页""Index""Home")</li> 
  10.  <li>@Html.ActionLink("用户管理""Index""User")</li> 
  11.  <li>@Html.ActionLink("角色管理""Index""Role")</li> 
  12.  <li class="active">修改</li> 
  13. </ol> 
  14.  
  15.  
  16. @using (Html.BeginForm()) 
  17.  @Html.AntiForgeryToken() 
  18.   
  19.  <div class="form-horizontal"
  20.   @Html.ValidationSummary(true""new { @class = "text-danger" }) 
  21.   @Html.HiddenFor(model => model.RoleID) 
  22.  
  23.   <div class="form-group"
  24.    @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
  25.    <div class="col-md-10"
  26.     @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
  27.     @Html.ValidationMessageFor(model => model.Name, ""new { @class = "text-danger" }) 
  28.    </div> 
  29.   </div> 
  30.  
  31.   <div class="form-group"
  32.    @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" }) 
  33.    <div class="col-md-10"
  34.     @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } }) 
  35.     @Html.ValidationMessageFor(model => model.Description, ""new { @class = "text-danger" }) 
  36.    </div> 
  37.   </div> 
  38.  
  39.   <div class="form-group"
  40.    <div class="col-md-offset-2 col-md-10"
  41.     <input type="submit" value="保存" class="btn btn-default" /> 
  42.    </div> 
  43.   </div> 
  44.  </div> 
  45.  
  46. @section Scripts { 
  47.  @Scripts.Render("~/bundles/jqueryval"
 

3)、添加提交数据的接收处理方法

在控制器中添加post方式的提交处理方法Modify方法。

  1. [HttpPost] 
  2.   [ValidateAntiForgeryToken] 
  3.   public ActionResult Modify(Role role) 
  4.   { 
  5.    if (ModelState.IsValid) 
  6.    { 
  7.     var _resp = roleManager.Update(role); 
  8.     if (_resp.Code == 1) return View("Prompt"new Prompt() 
  9.     { 
  10.      Title = "修改角色成功"
  11.      Message = "你已成功修改了角色【" + role.Name + "】"
  12.      Buttons = new List<string>() { "<a href="" + Url.Action("Index", "Role") + "" class="btn btn-default">角色管理</a>""<a href="" + Url.Action("Modify", "Role", new { id = role.RoleID }) + "" class="btn btn-default">查看</a>""<a href="" + Url.Action("Add", "Role") + "" class="btn btn-default">添加</a>" } 
  13.     }); 
  14.     else return View("Prompt"new Prompt() 
  15.     { 
  16.      Title = "修改角色失败"
  17.      Message = "失败原因:"+ _resp.Message, 
  18.      Buttons = new List<string>() { "<a href="" + Url.Action("Index", "Role") + "" class="btn btn-default">角色管理</a>""<a href="" + Url.Action("Modify", "Role", new { id = role.RoleID }) + "" class="btn btn-default">返回</a>"
  19.     }); 
  20.    } 
  21.    else return View(role); 
  22.   } 

6、删除角色

在控制器中添加Modify方法。

?
1
2
3
4
5
6
7
8
9
10
/// <summary>
  /// 删除【Json】
  /// </summary>
  /// <param name="id">RoleID</param>
  /// <returns></returns>
  [HttpPost]
  public JsonResult DeleteJson(int id)
  {
   return Json(roleManager.Delete(id));
  }

角色功能完成,按F5浏览器中预览效果

ASP.NET MVC5网站开发之用户角色的后台管理1(七)

 ---------------------------------------------------------------------------------------

代码见:https://ninesky.codeplex.com/SourceControl/latest

代码下载:https://ninesky.codeplex.com 点击SOURCE CODE 点击Download下载源文件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/mzwhj/p/5264035.html