欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-12 23:09:46
角色是网站中都有的一个功能,用来区分用户的类型、划分用户的权限,这次实现角色列表浏览、角色添加、角色修改和角色删除。 一、业务逻辑层 1、角色模型 ninesky.c...

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

一、业务逻辑层

1、角色模型

ninesky.core【右键】->添加->类,输入类名role。

引用system.componentmodel.dataannotations命名空间

using system.componentmodel.dataannotations;

namespace ninesky.core
{
 /// <summary>
 /// 角色
 /// </summary>
 public class role
 {
  [key]
  public int roleid { get; set; }

  /// <summary>
  /// 名称
  /// </summary>
  [required(errormessage ="必须输入{0}")]
  [stringlength(20,minimumlength =2, errormessage ="{0}长度为{2}-{1}个字符")]
  [display(name ="名称")]
  public string name { get; set; }

  /// <summary>
  /// 说明
  /// </summary>
  [stringlength(1000, errormessage = "{0}必须少于{1}个字符")]
  [display(name = "说明")]
  public string description { get; set; }

 }
}

2、添加表映射

打开ninesky.core/nineskycontext.cs,添加role表映射

3、迁移数据

1)、启用数据迁移

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

输入命令 enable-migrations 回车,为ninesk.core启用数据迁移。

打开ninesky.core/migrations/configuration.cs文件

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

2)、更新数据表

运行命令update-database。提示错误:there is already an object named 'administrators' in the database.

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

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

删除成功后再次运行update-database,执行成功。

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

4、角色管理

ninesky.core【右键】->添加->类,输入类名rolemanager,类继承自basemanager<role>

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;

namespace ninesky.core
{
 /// <summary>
 /// 角色管理
 /// </summary>
 public class rolemanager:basemanager<role>
 {
 }
}

 

二、展示层

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【右键】->添加->视图

 

@model ninesky.web.models.prompt

@{
 viewbag.title = model.title;
}

@section sidenav{@html.partial("sidenavpartialview")}

<ol class="breadcrumb">
 <li><span class="glyphicon glyphicon-home"></span> @html.actionlink("首页", "index", "home")</li>
 <li class="active">@model.title</li>
</ol>

<div class="panel panel-default">
 <div class="panel-heading"><div class="panel-title">@model.title</div></div>
 <div class="panel-body">
  <p>@html.raw(model.message)</p>
  @if(model.buttons!=null && model.buttons.count > 0) {
  <p>
   @foreach(var item in model.buttons)
   {
    @html.raw(item+ "  ")

   }
  </p>
  }
 </div>
</div>

2、管理员列表

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

在控制中添加方法 listjson() ,返回类型 jsonresoult

/// <summary>
  /// 列表【json】
  /// </summary>
  /// <returns></returns>
  public jsonresult listjson()
  {
   return json(rolemanager.findlist());
  }

2、添加角色首页视图

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

@{
 viewbag.title = "角色管理";
}

@section sidenav{@html.partial("sidenavpartialview")}

<ol class="breadcrumb">
 <li><span class="glyphicon glyphicon-home"></span> @html.actionlink("首页", "index", "home")</li>
 <li>@html.actionlink("用户管理", "index", "user")</li>
 <li class="active">@html.actionlink("角色管理", "index", "role")</li>
</ol>

<table id="admingrid"></table>
@section style{
 @styles.render("~/content/bootstrapplugincss")
}

@section scripts{
 @scripts.render("~/bundles/jqueryval")
 @scripts.render("~/bundles/bootstrapplugin")
 <script type="text/javascript">
  $(document).ready(function () {
   //表格
   var $table = $('#admingrid');
   $table.bootstraptable({
    showrefresh: true,
    showcolumns: true,
    showfooter: true,
    method: "post",
    url: "@url.action("listjson")",
    columns: [
     { title: "id", field: "roleid" },
     { title: "名称", field: "name", formatter: function (value, row, index) { return "<a href='@url.action("modify", "role")/" + row.roleid + "'>" + value + "</a>" } },
     { title: "说明", field: "description" },
     { title: "操作", field: "roleid", formatter: function (value) { return "<a class='btn btn-sm btn-danger' data-operation='deleterole' data-value='" + value + "'>删除</a>" } }
    ],
    onloadsuccess: function () {
     //删除按钮
     $("a[data-operation='deleterole']").click(function () {
      var id = $(this).attr("data-value");
      bootstrapdialog.confirm("你确定要删除" + $(this).parent().parent().find("td").eq(1).text() + "吗?", function (result) {
       if (result) {
        $.post("@url.action("deletejson", "role")", { id: id }, function (data) {
         if (data.code == 1) {
          bootstrapdialog.show({
           message: "删除角色成功",
           buttons: [{
            icon: "glyphicon glyphicon-ok",
            label: "确定",
            action: function (dialogitself) {
             $table.bootstraptable("refresh");
             dialogitself.close();
            }
           }]

          });
         }
         else bootstrapdialog.alert(data.message);
        }, "json");
       }
      });
     });
     //删除按钮结束
    }
   });
   //表格结束
  });
 </script>
}

3、导航视图

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

ninesky.web/areas/control/views/role【右键】->添加->视图

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

<div class="panel panel-default">
 <div class="panel-heading">
  <div class="panel-title"><span class="glyphicon glyphicon-user"></span> 用户管理</div>
 </div>
 <div class="panel-body">
  <div class="list-group">
   <div class="list-group-item"><span class="glyphicon glyphicon-plus"></span> @html.actionlink("角色添加", "add", "role")</div>
   <div class="list-group-item"><span class="glyphicon glyphicon-list"></span> @html.actionlink("角色管理", "index", "role")</div>
  </div>
 </div>
</div>

4、添加角色

1)、添加方法

在控制器中添加add方法

复制代码 代码如下:
/// <summary> /// 添加 /// </summary> /// <returns></returns> public actionresult add() { return view(); }

2)、添加视图

在方法上右键添加视图

 

@model ninesky.core.role

@{
 viewbag.title = "添加角色";
}

@section sidenav{@html.partial("sidenavpartialview")}

<ol class="breadcrumb">
 <li><span class="glyphicon glyphicon-home"></span> @html.actionlink("首页", "index", "home")</li>
 <li>@html.actionlink("用户管理", "index", "user")</li>
 <li>@html.actionlink("角色管理", "index", "role")</li>
 <li class="active">添加角色</li>
</ol>

@using (html.beginform()) 
{
 @html.antiforgerytoken()
 
 <div class="form-horizontal">
  @html.validationsummary(true, "", new { @class = "text-danger" })
  <div class="form-group">
   @html.labelfor(model => model.name, htmlattributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @html.editorfor(model => model.name, new { htmlattributes = new { @class = "form-control" } })
    @html.validationmessagefor(model => model.name, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @html.labelfor(model => model.description, htmlattributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @html.editorfor(model => model.description, new { htmlattributes = new { @class = "form-control" } })
    @html.validationmessagefor(model => model.description, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   <div class="col-md-offset-2 col-md-10">
    <input type="submit" value="保存" class="btn btn-default" />
   </div>
  </div>
 </div>
}

@section scripts {
 @scripts.render("~/bundles/jqueryval")
}

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

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

[httppost]
  [validateantiforgerytoken]
  public actionresult add(role role)
  {
   if (modelstate.isvalid)
   {
    if (rolemanager.add(role).code == 1)
    {
     return view("prompt", new prompt() { title = "添加角色成功",
      message ="你已成功添加了角色【"+ role.name+"】",
      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>"}
     });
    }
   }
   return view(role);
  }

5、管理员资料修改

1)、添加方法

在控制器中添加modify方法。

/// <summary>
  /// 修改
  /// </summary>
  /// <param name="id">roleid</param>
  /// <returns></returns>
  public actionresult modify(int id)
  {
   var _role = rolemanager.find(id);
   if(_role == null) return view("prompt", new prompt()
   {
    title = "错误",
    message = "id为【" + id + "】的角色不存在",
    buttons = new list<string>() { "<a href=\"" + url.action("index", "role") + "\" class=\"btn btn-default\">角色管理</a>"}
   });
   return view(_role);
  }

2)、添加视图

在方法中右键添加视图

代码如下:

@model ninesky.core.role

@{
 viewbag.title = model.name;
}

@section sidenav{@html.partial("sidenavpartialview")}

<ol class="breadcrumb">
 <li><span class="glyphicon glyphicon-home"></span> @html.actionlink("首页", "index", "home")</li>
 <li>@html.actionlink("用户管理", "index", "user")</li>
 <li>@html.actionlink("角色管理", "index", "role")</li>
 <li class="active">修改</li>
</ol>


@using (html.beginform())
{
 @html.antiforgerytoken()
 
 <div class="form-horizontal">
  @html.validationsummary(true, "", new { @class = "text-danger" })
  @html.hiddenfor(model => model.roleid)

  <div class="form-group">
   @html.labelfor(model => model.name, htmlattributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @html.editorfor(model => model.name, new { htmlattributes = new { @class = "form-control" } })
    @html.validationmessagefor(model => model.name, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @html.labelfor(model => model.description, htmlattributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @html.editorfor(model => model.description, new { htmlattributes = new { @class = "form-control" } })
    @html.validationmessagefor(model => model.description, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   <div class="col-md-offset-2 col-md-10">
    <input type="submit" value="保存" class="btn btn-default" />
   </div>
  </div>
 </div>
}

@section scripts {
 @scripts.render("~/bundles/jqueryval")
}

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

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

[httppost]
  [validateantiforgerytoken]
  public actionresult modify(role role)
  {
   if (modelstate.isvalid)
   {
    var _resp = rolemanager.update(role);
    if (_resp.code == 1) return view("prompt", new prompt()
    {
     title = "修改角色成功",
     message = "你已成功修改了角色【" + role.name + "】",
     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>" }
    });
    else return view("prompt", new prompt()
    {
     title = "修改角色失败",
     message = "失败原因:"+ _resp.message,
     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>"}
    });
   }
   else return view(role);
  }

6、删除角色

在控制器中添加modify方法。

/// <summary>
  /// 删除【json】
  /// </summary>
  /// <param name="id">roleid</param>
  /// <returns></returns>
  [httppost]
  public jsonresult deletejson(int id)
  {
   return json(rolemanager.delete(id));
  }

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

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

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

代码下载: 点击source code 点击download下载源文件。

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