ASP.NET MVC5网站开发之用户角色的后台管理1(七)
角色是网站中都有的一个功能,用来区分用户的类型、划分用户的权限,这次实现角色列表浏览、角色添加、角色修改和角色删除。
一、业务逻辑层
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
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【右键】->添加->视图
<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方法
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下载源文件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。