1. 程式人生 > >基於MVC4+EasyUI的Web開發框架經驗總結(12)--利用Jquery處理資料互動的幾種方式

基於MVC4+EasyUI的Web開發框架經驗總結(12)--利用Jquery處理資料互動的幾種方式

在基於MVC4+EasyUI的Web開發框架裡面,大量採用了Jquery的方法,對資料進行請求或者提交,方便頁面和伺服器後端進行資料的互動處理。本文主要介紹利用Jquery處理資料互動的幾種方式,包括獲取資料並顯示,插入新資料到伺服器,更新資料,刪除資料等操作。

1、利用Jquery獲取資料並顯示

為了順利獲取資料,我們需要保持頁面端呼叫和伺服器端保持一致,並相應的把資料轉換或者封裝為物件實體進行處理。

下面我們以一個簡單的全國省份、全國城市、全國城市行政區的案例進行Demo程式碼的介紹。

 

 

總體的操作包括了,分頁查詢,新增資料的儲存,編輯顯示和儲存,檢視資訊的資料顯示等等,而利用Jquery獲取資料並繫結到介面控制元件上的程式碼操作如下所示,主要就是利用getJson方法進行處理。

        //繫結編輯詳細資訊的方法
        function BindEditInfo(ID) {
            //使用同步方式,使得聯動的控制元件正常顯示
            $.ajaxSettings.async = false;
            //首先使用者傳送一個非同步請求去後臺實現方法
            $.getJSON("/Province/FindByID?id=" + ID, function (info) {
            //賦值有幾種方式:.datebox('setValue', info.Birthday);.combobox('setValue', info.Status);.val(info.Name);.combotree('setValue', info.PID);.numberbox('setValue', info.Number);
$("#ID").val(info.ID); $("#ProvinceName").val(info.ProvinceName); isAddOrEdit = 'edit';//新增對話方塊標識 }); } //繫結檢視詳細資訊的方法 function BindViewInfo(ID) { //傳送請求 $.getJSON("/Province/FindByID?id=
" + ID, function (info) { $("#ID2").text(info.ID); $("#ProvinceName2").text(info.ProvinceName); }); }

getJson方法主要就是呼叫MVC裡面控制器的方法,獲取資料,並把它轉換為Json的物件實體,這樣我們就能方便獲取到對應的屬性,從而繫結到介面控制元件。而FindByID的介面是控制器裡面的方法定義,我們可以通過下面的控制器基類程式碼瞭解具體的邏輯。

        /// <summary>
        /// 查詢資料庫,檢查是否存在指定ID的物件
        /// </summary>
        /// <param name="id">物件的ID值</param>
        /// <returns>存在則返回指定的物件,否則返回Null</returns>
        public virtual ActionResult FindByID(string id)
        {
            //檢查使用者是否有許可權,否則丟擲MyDenyAccessException異常
            base.CheckAuthorized(AuthorizeKey.ViewKey);

            ActionResult result = Content("");
            T info = baseBLL.FindByID(id);
            if (info != null)
            {
                result = ToJsonContentDate(info);
            }

            return result;
        }
        /// <summary>
        /// 返回處理過的時間的Json字串
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public ContentResult ToJsonContentDate(object date)
        {
            var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
            return Content(JsonConvert.SerializeObject(date, Formatting.Indented, timeConverter));
        }

2、利用Jquery儲存資料到伺服器

上面的操作是從服務端獲取資料並顯示在頁面上,下面我們來介紹如何把資料通過通過Jquery呼叫,儲存到伺服器上。

在Web框架裡面,我們把新增資料和編輯資料的介面,共享了一個層的介面程式碼,這樣可以減少主介面檢視Index.cshtml的程式碼數量(因為我們把各種介面的程式碼放在一個檔案裡面,方便操作管理)。

    <!--------------------------新增/修改資訊的彈出層---------------------------->
    <div id="DivAdd" class="easyui-dialog" style="width:680px;height:200px;padding:10px 20px"
            closed="true" resizable="true" modal="true" data-options="iconCls: 'icon-add',buttons: '#dlg-buttons'">
        <form id="ffAdd" method="post" novalidate="novalidate">
            <div id="tabAdd" class="easyui-tabs" >
                <div title="基本資訊" data-options="iconCls:'icon-view'"  style="padding:5px 5px">
                    <table>
                        <tr>
                            <td>                    
                                <table id="tblAdd1" class="view">
                                    <tr> 
                                        <th>
                                            <label for="ProvinceName">省份名稱:</label>
                                        </th>
                                        <td colspan="3">
                                            <input class="easyui-validatebox" type="text" id="ProvinceName" name="ProvinceName" style="width:280px;"  />
                                        </td>
 
                                    </tr>
                                 </table>
                            </td>
                        </tr>
                    </table>
                </div>
            </div>
            <div style="text-align:right; padding-top:10px">
                <input type="hidden" id="ID" name="ID" />
                <a href="javascript:void(0)" class="easyui-linkbutton" id="btnAddOK" iconcls="icon-ok" onclick="SaveEntity()">確定</a>
                <a href="javascript:void(0)" class="easyui-linkbutton" iconcls="icon-cancel" onclick="javascript:$('#DivAdd').dialog('close')">關閉</a>
            </div>
         </form>
    </div>

而資料的儲存,我們也用同一個函式,這樣也很方便,同時減少程式碼數量,儲存操作的javascript指令碼函式如下所示。

        //繫結新增按鈕的事件
        function SaveEntity() {
            //判斷表單的資訊是否通過驗證
            var validate = $("#ffAdd").form('validate');
            if (validate == false) {
                return false;
            }

            var postData = $("#ffAdd").serializeArray();
            $.post(url, postData, function (json) {
                var data = $.parseJSON(json);
                if (data.Success) {
                    //新增成功  1.關閉彈出層,2.重新整理DataGird
                    showTips("儲存成功");
                    $("#DivAdd").dialog("close");
                    $("#grid").datagrid("reload");
                    $("#ffAdd").form("clear");
                }
                else {
                    showError("儲存失敗:" + data.ErrorMessage, 3000);
                }
            }).error(function () {
                $.messager.alert("提示", "您未被授權使用該功能,請聯絡管理員進行處理。", 'warning');
            });
        }

由於每個層都定義了Name和ID,因此我們可以很容易通過下面方式獲取到對應的物件資料,方便提交。

var postData = $("#ffAdd").serializeArray();

插入資料的時候,呼叫的路徑如下所示:

url = '/Province/Insert';

更新資料的時候,呼叫的路徑如下數艘:

url = '/Province/Update?ID=' + ID;

插入物件到資料庫裡面的控制器方法,主要還是呼叫BLL層的物件方法進行處理,不過事先會進行一定的許可權控制和資訊補充,如下程式碼所示。

        /// <summary>
        /// 插入指定物件到資料庫中
        /// </summary>
        /// <param name="info">指定的物件</param>
        /// <returns>執行操作是否成功。</returns>
        public virtual ActionResult Insert(T info)
        {
            //檢查使用者是否有許可權,否則丟擲MyDenyAccessException異常
            base.CheckAuthorized(AuthorizeKey.InsertKey);

            CommonResult result = new CommonResult();
            if (info != null)
            {
                try
                {
                    OnBeforeInsert(info);
                    result.Success = baseBLL.Insert(info);
                }
                catch(Exception ex)
                {
                    LogTextHelper.Error(ex);//錯誤記錄
                    result.ErrorMessage = ex.Message;
                }
            }
            return ToJsonContent(result);
        }

我們注意到,插入和更新操作,返回的物件都是 CommonResult  物件,這個物件,包含了一個Success的布林屬性,用來表示是否成功,還有一個ErrorMessage屬性,用來標識錯誤資訊的,所以我們利用Javascript指令碼處理儲存操作的時候,也需要使用這兩個屬性,用來區分和提示資訊的顯示。

                var data = $.parseJSON(json);
                if (data.Success) {
                    //新增成功  1.關閉彈出層,2.重新整理DataGird
                    showTips("儲存成功");
                    $("#DivAdd").dialog("close");
                    $("#grid").datagrid("reload");
                    $("#ffAdd").form("clear");
                }
                else {
                    showError("儲存失敗:" + data.ErrorMessage, 3000);
                }

操作完成後,提示成功的資訊如下所示。

3、利用Jquery刪除列表資料操作

利用Jquery函式,可以POST刪除的請求到伺服器上,在此之前我們需要了解我們需要刪除那些記錄,並確認提示是否刪除,刪除成功後,更新列表,並提示使用者,大致的頁面程式碼函式如下所示。

        //實現刪除資料的方法
        function Delete() {
            //得到使用者選擇的資料的ID
            var rows = $("#grid").datagrid("getSelections");
            if (rows.length >= 1) {
                //遍歷出使用者選擇的資料的資訊,這就是使用者使用者選擇刪除的使用者ID的資訊
                var ids = "";   //1,2,3,4,5
                for (var i = 0; i < rows.length; i++) {
                    ids += rows[i].ID + ",";
                }
                //最後去掉最後的那一個,
                ids = ids.substring(0, ids.length - 1);
                var postData = { Ids: ids };

                //然後確認傳送非同步請求的資訊到後臺刪除資料
                $.messager.confirm("刪除確認", "您確認刪除選定的記錄嗎?", function (action) {
                    if (action) {
                        $.ajax({
                            type: 'POST',
                            url: '/District/DeletebyIds',
                            dataType: 'json',
                            data: postData,
                            success: function (data) {
                                if (data.Success) {
                                    showTips("刪除選定的記錄成功");

                                    $("#grid").datagrid("reload");
                                    //當刪除完成之後,第二次刪除的時候還記得上次的資訊,這樣是不可以的,所以我們需要清除第一次的資訊                                
                                    rows.length = "";//第一種方法                                
                                    $("#grid").datagrid("clearSelections");//第二種方法
                                }
                                else {
                                    showError("操作失敗:" + data.ErrorMessage, 3000);
                                }
                            }
                        });
                    }
                });
            }
            else {
                $.messager.alert("提示", "請選擇你要刪除的資料");
            }
        }

而伺服器的MVC控制器類,我們也只需要呼叫基類控制器方法就可以了,基本上不需要額外的處理程式碼。

MVC控制器基類的方法定義如下所示,注意最後返回的是一個常見類CommonResult ,承載這個是否操作成功和錯誤資訊(如果存在的話)。

        /// <summary>
        /// 刪除多個ID的記錄
        /// </summary>
        /// <param name="ids">多個id組合,逗號分開(1,2,3,4,5)</param>
        /// <returns></returns>
        public virtual ActionResult DeleteByIds(string ids)
        {
            //檢查使用者是否有許可權,否則丟擲MyDenyAccessException異常
            base.CheckAuthorized(AuthorizeKey.DeleteKey);

            CommonResult result = new CommonResult();
            try
            {
                if (!string.IsNullOrEmpty(ids))
                {
                    List<string> idArray = ids.ToDelimitedList<string>(",");
                    foreach (string strId in idArray)
                    {
                        if (!string.IsNullOrEmpty(strId))
                        {
                            baseBLL.Delete(strId);
                        }
                    }
                    result.Success = true;
                }
            }
            catch (Exception ex)
            {
                LogTextHelper.Error(ex);//錯誤記錄
                result.ErrorMessage = ex.Message;
            }
            return ToJsonContent(result);
        } 

城市資訊介面如下所示。

行政區管理介面如下所示。

基於MVC4+EasyUI的Web開發框架的系列文章:

相關推薦

基於MVC4+EasyUI的Web開發框架經驗總結12--利用Jquery處理資料互動方式

在基於MVC4+EasyUI的Web開發框架裡面,大量採用了Jquery的方法,對資料進行請求或者提交,方便頁面和伺服器後端進行資料的互動處理。本文主要介紹利用Jquery處理資料互動的幾種方式,包括獲取資料並顯示,插入新資料到伺服器,更新資料,刪除資料等操作。 1、利用Jquery獲取資料並顯示 為了順

基於MVC4+EasyUI的Web開發框架經驗總結1-利用jQuery Tags Input 外掛顯示選擇記錄

最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在使用者體驗和介面設計方面,和Winform開發框架保持一致,而在Web上,我主要採用EasyUI的前端介面處理技術,走MVC的技術路線,在重構完善過程中,很多細節花費不少時間進行研究和提煉,一步步走過來,也積累了不

基於MVC4+EasyUI的Web開發框架經驗總結11--使用Bundles處理簡化頁面程式碼

在Web開發的時候,我們很多時候,需要引用很多CSS檔案、JS檔案,隨著使用更多的外掛或者獨立樣式檔案,可能我們的Web介面程式碼會越來越臃腫,看起來也很累贅,在MVC裡面提供了一個Bundle的物件,用來簡化頁面程式碼非常方便,本文主要介紹在我的MVC框架裡面,如何使用bundles來簡化頁面的程式碼的。

基於Metronic的Bootstrap開發框架經驗總結12--頁面連結收藏夾功能的實現

在一個系統裡面,往往有很多選單專案,每個選單項對應一個頁面,一般使用者只需要用到一些常用的功能,如果每次都需要去各個層次的選單裡面去找對應的功能,那確實有點繁瑣。特別是在選單繁多,而客戶又對系統整體不熟悉的情況下,如果有一個類似瀏覽器的收藏夾模組,把一些常用的選單連線儲存起來,每次從這個收藏夾主頁去找對應的頁

基於MVC4+EasyUI的Web開發框架經驗總結5--使用HTML編輯控件CKEditor和CKFinder

err config 兩個 腳本 web開發 upload asp 正常 初始 http://www.cnblogs.com/wuhuacong/p/3780356.html Web開發上有很多HTML的編輯控件,如CKEditor、kindeditor等等,很多都做的很

基於MVC4+EasyUI的Web開發框架經驗總結2- 使用EasyUI的樹控件構建Web界面

set 應用 get ember trim ase str zab ble http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在用戶體驗和界面設計方面,和Winfor

基於MVC4+EasyUI的Web開發框架經驗總結6--在頁面中應用下拉列表的處理

ica new web開發 don ext images 如果 bob 獲取 http://www.cnblogs.com/wuhuacong/p/3840321.html 在很多Web界面中,我們都可以看到很多下拉列表的元素,有些是固定的,有些是動態的;有些是字典內容,

基於MVC4+EasyUI的Web開發框架經驗總結8--實現Office文檔的預覽

討論 off info code .cn viewer 存在 nco app http://www.cnblogs.com/wuhuacong/p/3871991.html 基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽

基於MVC4+EasyUI的Web開發框架經驗總結3- 使用Json實體類構建選單資料

最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在使用者體驗和介面設計方面,和Winform開發框架保持一致,而在Web上,我主要採用EasyUI的前端介面處理技術,走MVC的技術路線,在重構完善過程中,很多細節花費不少時間進行研究和提煉,一步步走過來,也積累了不少經驗,本系列將主要介紹我在進一步

基於MVC4+EasyUI的Web開發框架經驗總結13--DataGrid控制元件實現自動適應寬頻高度

在預設情況下,EasyUI的DataGrid好像都沒有具備自動寬度的適應功能,一般是指定畫素寬度的,但是使用的人員計算機的螢幕解析度可能不一樣,因此導致有些地方顯示太大或者太小,總是不能達到好的預期效果,如果DataGrid能夠根據視窗尺寸進行伸縮,效果應該好很多。本文主要介紹DataGrid控制元件實現自動

基於MVC4+EasyUI的Web開發框架經驗總結4--使用圖表控制元件Highcharts

在我們做各種應用的時候,我們可能都會使用到圖表統計,以前接觸過一些不同的圖表控制元件,在無意中發現了圖表控制元件Highcharts,其強大的功能和豐富的互動效果,令人難以忘懷。本篇主要介紹在Web開發中使用圖表控制元件Highcharts,以及對其進行統一漢化等操作,讓我們的程式功能更加豐富,內容更加美觀。

基於MVC4+EasyUI的Web開發框架經驗總結2- 使用EasyUI的樹控制元件構建Web介面

最近花了不少時間在重構和進一步提煉我的Web開發框架上,力求在使用者體驗和介面設計方面,和Winform開發框架保持一致,而在Web上,我主要採用EasyUI的前端介面處理技術,走MVC的技術路線,在重構完善過程中,很多細節花費不少時間進行研究和提煉,一步步走過來,也積累了不少經驗,本系列將主要介紹我在進一步

基於MVC4+EasyUI的Web開發框架經驗總結7--實現省份、城市、行政區三者聯動

為了提高客戶體驗和進行一些技術探索,現在正準備把我自己的客戶關係管理系統CRM在做一個Web的版本,因此對基於MVC的Web介面繼續進行一些研究和優化,力求在功能和介面上保持和Winform一致,本文主要介紹在我的CRM系統中用到的全國省份、城市、行政區三者的兩種效果,在Winform上實現沒問題,在Web上

基於MVC4+EasyUI的Web開發框架經驗總結6--在頁面中應用下拉列表的處理

在很多Web介面中,我們都可以看到很多下拉列表的元素,有些是固定的,有些是動態的;有些是字典內容,有些是其他表裡面的名稱欄位;有時候引用的是外來鍵ID,有時候引用的是名稱文字內容;正確快速使用下拉列表的處理,可以提高我們程式介面的美觀性和友好型,本文主要介紹在我的Web開發框架以及相關的擴充套件Web應用中用

基於MVC4+EasyUI的Web開發框架經驗總結14--自動生成圖示樣式檔案和圖示的選擇操作

在很多Web系統中,一般都可能提供一些圖示的選擇,方便配置按鈕,選單等介面元素的圖示,從而是Web系統介面看起來更加美觀和協調。但是在系統中一般內建的圖示樣式相對比較有限,而且硬編碼寫到樣式表裡面,這樣給我們擴充套件使用有很多的不方便。基於這個原因,我想如果能夠獨立一個模組,自動根據圖示生成圖示CSS樣式檔案

基於MVC4+EasyUI的Web開發框架經驗總結9--在Datagrid裡面實現外來鍵欄位的轉義操作

我們在使用EasyUI的時候,很多情況下需要使用到表格控制元件datagrid,這個控制元件控制元件非常強大,使用起來很簡潔,但是我在使用中,發現對於一個表裡面的外來鍵欄位進行轉義,並顯示引用表的一些名稱的操作,卻顯得比較難以實現,找了很多資料,基本上沒有找到對應的解決方案。本文主要介紹我對這種外來鍵欄位轉義

基於MVC4+EasyUI的Web開發框架經驗總結8--實現Office文件的預覽

在部落格園很多文章裡面,曾經有一些介紹Office文件預覽檢視操作的,有些通過轉為PDF進行檢視,有些通過把它轉換為Flash進行檢視,但是過程都是曲線救國,真正能夠簡潔方便的實現Office文件的預覽的還是比較少,這裡的Office文件包括了Word、Excel、PPT文件。本文介紹兩種方式,一種方式是通過

基於MVC4+EasyUI的Web開發框架經驗總結5--使用HTML編輯控制元件CKEditor和CKFinder

Web開發上有很多HTML的編輯控制元件,如CKEditor、kindeditor等等,很多都做的很好,本文主要介紹在MVC介面裡面,CKEditor的配置和使用。CKEditor的前身是FCKEditor,隨著它的更新,上傳圖片的功能被分離出去了,現在如果需要實現上傳圖片,要麼自己寫程式碼或者採用其他上傳控

基於MVC4+EasyUI的Web開發框架經驗總結10--在Web介面上實現資料的匯入和匯出

資料的匯入匯出,在很多系統裡面都比較常見,這個匯入匯出的操作,在Winform裡面比較容易實現,我曾經在之前的一篇文章《Winform開發框架之通用資料匯入匯出操作》介紹了在Winform裡面的通用匯入匯出模組的設計和開發過程,但在Web上我們應該如何實現呢?本文主要介紹利用MVC4+EasyUI的特點,並結

基於Metronic的Bootstrap開發框架經驗總結17-- 使用 summernote插件實現HTML文檔的編輯和圖片插入操作

系統 cat 寫入 視頻 編寫 查看 absolute upload form 在很多場合,我們需要在線編輯HTML內容,然後在頁面上或者其他終端上(如小程序、APP應用等)顯示,編輯HTML內容的插件有很多,本篇介紹基於Bootstrap的 summernote插件實現H