请注明转载地址:http://www.cnblogs.com/arhat

在上一章中呢,我们基本上搭建好了环境,那么本章我们就从基础模块开始写起。由于用户,角色,动作三个当中,都是依赖与动作的,所以本章我们从动作开始做起,先把这个基础模块建立起来,然后才能把用户,角色和动作关联起来形成权限。

首先建立一个新的Controller为ActionController,为其Index方法创建一个视图文件,由于这样的视图文件太多了,而且重复性的代码也比较多,所以我们把共有的部分移植到Views/Shared/_Layout.cshtml中,换句话说就是使用模板。

_Layout.cshtml内容如下:

<!DOCTYPE html>

<html>

<head>

<title>@ViewBag.Title</title>

<link href="/Content/easyui.css" rel="stylesheet" type="text/css" />

<link href="/Content/icon.css" rel="stylesheet" type="text/css" />

<link href="/Content/base.css" rel="stylesheet" />

<script src="/Content/jquery.min.js"></script>

<script src="/Content/jquery.easyui.min.js"></script>

<script type="text/javascript">

function createIFrame(src) {

var iframe = "<iframe width='100%' height='100%' scrolling='no' frameborder='0' src='" + src + "'></iframe>";

return iframe;

        }

@RenderSection("script",false)

</script>

</head>

<body>

@RenderBody()

</body>

</html>

然后我们建立ActionController的Index方法的View文件,内容如下:

@{

    ViewBag.Title = "动作设置";

    Layout = "/Views/Shared/_Layout.cshtml";

}

@section script{

    $(document).ready(function(){

        initActionGrid();

    });

    function initActionGrid(){

        $("#grid").datagrid({

            url:'/Action/LoadActionData',

            fitColumns:true,

            rownumbers:true,

            toolbar: [{

                iconCls: 'sys-icon-add',

                text:"添加动作",

                handler:addAction

            }],

            columns:[[

                {field:'AId',title:'ID',width:10,align:'center'},

                {field:'AName',title:'动作名',width:200,align:'center'},

                {field:'AValue',title:'动作值',width:200,align:'center'},

                {field:'opt',title:'操作',width:70,align:'center',formatter:function(v,r,i){

                return "<a href='javascript:delAction("+r.AId+")'><img src='/Content/sys_icons/decline.png' /></a> <a href='javascript:editAction("+r.AId+")'><img src='/Content/sys_icons/disk_edit.png' /></a>";

                }}

            ]]

        });

    }

    function addAction(){

        $('#dialog').dialog({

            title: '添加动作',

            iconCls:"sys-icon-add",

            width: 400,

            height: 300,

            closed: false,

            cache: false,

            modal: true,

            onClose:function(){

                $("#grid").datagrid("reload");

            },

            content:createIFrame("/Action/AddAction")

        });

    }

    function delAction(_aid){

        $.messager.confirm("提示","确认要删除此动作吗?",function(b){

            if(b){

            $.get("/Action/DelAction/",{aid:_aid},function(data){

                    if(data=="y"){

                        $("#grid").datagrid("reload");

                    }

                },"text");

            }

        });

    }

}

<table id="grid" data-options="fit:true"></table>

<div id="dialog" style="overflow:hidden"></div>

这里使用了EasyUI的DataGrid和Dialog组件,同时我们通过相应的JS函数来实现对Action的CRUD操作。

在initActionGrid函数中我们队Grid进行了一些初始化的操作,从参数可以看出我们的数据加载是通过Action/LoadData这个Action完成的,所以我们在ActionController中添加这样的方法。

[HttpPost]

public ActionResult LoadActionData()
{ var json = new { total = permitBLL.GetAllActionList().Count, rows = permitBLL.GetAllActionList() }; return Json(json,JsonRequestBehavior.DenyGet); }

这个方法中使用了B_Permit这个类的实例来获得数据。下面我们看一下这个类的内容:

#region 查询方法

/// <summary>

/// 得到所有的Action

/// </summary>

/// <returns></returns>

public List<Model.M_ArHat_Action> GetAllActionList() 

        {

List<Model.M_ArHat_Action> list = null;

DataTable dt = permitDAL.SelectAllAction();

if (dt != null && dt.Rows.Count > 0)

            {

                list = new List<Model.M_ArHat_Action>();

                Model.M_ArHat_Action action = null;

foreach (DataRow row in dt.Rows)

                {

                    action = new Model.M_ArHat_Action();

                    action.AId = Convert.ToInt32(row["AId"]);

                    action.AName = row["AName"].ToString();

                    action.AValue = row["AValue"].ToString();

                    list.Add(action);

                }

            }

return list;

        }

        #endregion

        #region 添加方法

/// <summary>

/// 添加一个Action

/// </summary>

/// <param name="action"></param>

public void AddAction(Model.M_ArHat_Action action)

        {

            permitDAL.AddAction(action);

        }

        #endregion

在这个类中,提供了两个方法,一个是用来查询的,一个是用来插入的。当然了这里肯定少不了DAL层的功劳,同时我们来看看DAL中的D_Permit.cs的内容:

public class D_Permit 

    { 

        #region SQL语句 

//查询所有的动作(未分页) 

private static readonly string sql1 = "select * from ArHat_Action order by AId Desc"; 

//添加一个动作 

private static readonly string sql2 = "insert into ArHat_Action values(@AName,@AValue)"; 

        #endregion 

        #region 添加方法 

/// <summary> 

/// 添加一个动作 

/// </summary> 

/// <param name="action"></param> 

public void AddAction(Model.M_ArHat_Action action) 

        { 

SqlParameter[] parameters = { 

new SqlParameter("@AName",SqlDbType.VarChar,50), 

new SqlParameter("@AValue",SqlDbType.VarChar,50) 

                                        }; 

            parameters[0].Value = action.AName; 

            parameters[1].Value = action.AValue; 

            DAL.SqlHelper.ExecuteNonQuery(sql2, parameters); 

        } 

        #endregion 

        #region 查询方法 

/// <summary> 

/// 查询所有的动作 

/// </summary> 

/// <returns></returns> 

public DataTable SelectAllAction()  

        { 

return DAL.SqlHelper.ExecuteQuery(sql1); 

        } 

        #endregion 

    }

在这个类中,我们实现了对Action的查询和添加的SQL实现。说到这里呢,如果说要让项目能够更加的灵活,那么应该在三层架构的基础上添加面向接口的编程,换句话说我们得创建一个IDAL和IBLL两个项目,在这两个项目中要写出对数据库和业务逻辑的抽象操作,这是最好不过了,但是本身由于老魏这个项目比较小,所以就没有采用这中写法,感兴趣的朋友可以再QQ群中来共同的讨论一下。

好了,现在我们来看一下最后运行的结果。

当我们点击“添加动作”的时候,界面如下:

这里需要注意的是,在添加动作的js函数中,使用了content:createIFrame("/Action/AddAction")。也就是用iframe来加载AddAction的界面,当点击保存的时候会执行一个Post请求。关于这连个Action我们来看一下内容:

[HttpGet]

public ActionResult AddAction() 

        {

return View();

        }

/// <summary>

/// 添加动作Post

/// </summary>

/// <param name="action"></param>

/// <returns></returns>

        [HttpPost]

public ActionResult AddAction(Model.M_ArHat_Action actionInfo)

        {

try

            {

                permitBLL.AddAction(actionInfo);

StringBuilder sb = new StringBuilder();

                sb.Append(@"

                    <script>    

                        parent.$(""#dialog"").dialog(""close"");

                    </script>

                ");

return Content(sb.ToString());

            }

catch (Exception ex)

            {

return Content("添加失败:" + ex.Message);

            }

        }

这里由于老魏没有使用Jquery提供的jquery.unobtrusie-ajax.js,所以这里使用了Content来执行关闭对话框的方法。当然了,在UI端,需要注意的是要给Dialog设置一个onClose的事件,让其关闭的时候能够刷新父页面。

至于删除,老魏这里没有做,如果大家在做的过程中遇到了,希望能够自行的实现。本章到这里就写到这里吧,虽然都是一堆代码,看起来没有什么,但是在写js的时候真是费劲啊。

在这里得抱歉说一下了,老婆的预产期就要到了,所以后续的章节可能跟新的慢了,但是老魏保证的是肯定不会夭折的。

ASP.NET MVC +EasyUI 权限设计(三)基础模块的更多相关文章

  1. ASP.NET MVC +EasyUI 权限设计(一)开篇

    在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...

  2. ASP.NET MVC +EasyUI 权限设计(二)环境搭建

    请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...

  3. ASP.NET MVC +EasyUI 权限设计(四)角色动作

    请注明转载地址:http://www.cnblogs.com/arhat 由于最近的事情比较多,一直忙于工作和照顾老婆,所以老魏更新的速度慢了,本来写文章就要占据工作和生活很多的时间,这也就是院子中很 ...

  4. asp.net mvc +easyui 实现权限管理(二)

    一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下 ...

  5. ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍

    一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...

  6. 关于ASP.NET MVC的权限认证的一些总结

    最近在学ASP.NET MVC的权限认证的一些东西,上网搜索了一阵,发现网上的方法大多数是以下几类: 一.FormsAuthentication.SetAuthCookie(admin.Name, f ...

  7. ASP.NET MVC+EasyUI+Entity FrameWork 整合开发

    本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type=.mi ...

  8. 对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识

    对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识   初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相 ...

  9. Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架

    Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架 初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相关资料,了解了框 ...

随机推荐

  1. FreeBSD 安裝 Tomcat JAVA JDK1.6 筆記

    首先是安裝軟體 cd /usr/ports/java/jdk16/ make 在這一步,需要你手動到sun.com上下載幾個安裝包,按提示下載好後加入到 /usr/ports/distfiles/,再 ...

  2. Ajax学习笔记(一)

    来源:http://www.imooc.com/learn/250 Ajax不是某种编程语言,而是一种在无须重新加载整个网页的情况下能够更新部分网页的技术. 一.概念介绍--异步 利用XMLHttpR ...

  3. VB.NET 小程序 3

    Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...

  4. 【转】C# 中访问修饰符

    用通过代码:  类内部 using System;class Mod{    void defaultMethod()    {        Console.WriteLine("this ...

  5. cocos2d-x游戏循环与调度

    每一个游戏程序都有一个循环在不断运行,它是有导演对象来管理很维护.如果需要场景中的精灵运动起来,我们可以在游戏循环中使用定时器(Scheduler)对精灵等对象的运行进行调度.因为Node类封装了Sc ...

  6. 以莫泰的形式进行页面转换(传值用block)

    1.在第一个页面进入第二个页面可以使用莫泰的方式 在第一个页面包含第二个页面的头文件#import "FirstViewController.h"#import "Vie ...

  7. Netfilter深度解剖

         在网络上发现这个Netfilter写的很好的系列文章,为了便于后期寻找,特此标注下博客地址,感谢大大神提供.     ---------------------------分割线开始---- ...

  8. POJ 1384

    求猜存钱罐中至少有多少钱.容易知道金币总的重量,接着背包. #include<cstdio> #include<iostream> using namespace std; # ...

  9. js设计模式(4)---组合模式

    0.前言 今天是建党节,新疆那边又开始了闹腾.作为立志成为码农的我,现在已经从一个大愤青淡化为一个小愤青,对这些国家民生大事不在血气喷发,转而把经历发泄在技术问题上面,因而在扯一篇随笔吧,把无处发泄的 ...

  10. 运行yum报错Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

    今天给Centos通过rpm -Uvh装了个epel的扩展后,执行yum就开始报错: Error: Cannot retrieve metalink for repository: epel. Ple ...