ASP.NET MVC +EasyUI 權限設計(三)基礎模塊


請注明轉載地址: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群中來共同的討論一下。

好了,現在我們來看一下最后運行的結果。

wps_clip_image-9823

當我們點擊“添加動作”的時候,界面如下:

wps_clip_image-2414

這里需要注意的是,在添加動作的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的時候真是費勁啊。

在這里得抱歉說一下了,老婆的預產期就要到了,所以后續的章節可能跟新的慢了,但是老魏保證的是肯定不會夭折的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM