ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets(转)
jqwidgets.js:
是一个功能完整的框架,它具有专业的可触摸的jQuery插件、主题、输入验证、拖放插件、数据适配器,内置WAI-ARIA(无障碍网页应用)可访问性、国际化和MVVM模式支持。jQWidgets 为搭建专业网站和开发移动应用程序提供了一个全面的解决方案。它完全基于开放的标准和技术,如 HTML5、CSS、Javascript和jQuery。jQWidgets能实现响应式web开发,可以帮助您创建在桌面、平板电脑和智能手机上看起来很漂亮的应用程序和网站。
无论是美感还是功能都比easyui更胜一筹,代码开源使用收费。
SyntacticSugar.dll:
功能齐全包含验证、通用扩展函数、类型转换、文件上传、以及大量C#语法糖的一款工具类库。
源码地址:https://github.com/sunkaixuan/SyntacticSugar
SqlSugar.dll:
是一款基于MSSQL的轻量级、高性能、简单易用的ORM框架
教程及源码下载地址: http://www.cnblogs.com/sunkaixuan/p/4649904.html
JQWidgetsSugar.dll (本贴的重点)
基于jqwidgets.js 的C#封装类库 ,目前只完成了grid部分 ,我的所有GIT项目会在以后项目开发中持续更新
效果图:

C#代码
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;usingSqlSugar;usingDAL;usingJQWidgetsSugar;usingModels;usingSyntacticSugar;namespaceNetJQWidgets.Controllers{    publicclassGridController : Controller    {        publicActionResult Index()        {            varadp = newGridDataAdapterSource();            adp.url = "/Grid/Data";            vargc = newGridConfig();            gc.gridbuttons = newList<GridButton>()            {               newGridButton(){ click="add", name="addbutton", icon="jqx-icon-plus", title="添加"},               newGridButton(){ click="edit", name="editbutton", icon="jqx-icon-edit", title="编辑"},               newGridButton(){ click="del", name="delbutton", icon="jqx-icon-delete", title="删除"}            };            gc.pageSize = 20;            gc.width = "80%";            gc.columns = newList<GridColumn>(){               newGridColumn(){ text="编号", datafield="id", width="40px", cellsalign=AlignType.left,datatype=Datatype.dataint  },               newGridColumn(){ text="名称", datafield="name", cellsalign=AlignType.left,datatype=Datatype.datastring },               newGridColumn(){ text="产品名", datafield="productname", cellsalign=AlignType.left,datatype=Datatype.datastring },               newGridColumn(){ text="数量", datafield="quantity", cellsalign=AlignType.right , datatype=Datatype.dataint },               newGridColumn(){ text="创建时间", datafield="date", cellsformat="yyyy-MM-dd",cellsalign=AlignType.right, datatype=Datatype.datadate              }            };                   vargrid = JQXGrid.BindGrid("#netgrid", adp, gc);            ViewBag.validationBind = ValidationSugar.GetBindScript("validate_key_grid_index");            returnView(grid);        }        [HttpDelete]        publicJsonResult Del(intid)        {            using(SqlSugarClient db = SugarDao.GetInstance())            {                ActionResultModel<string> model = newActionResultModel<string>();                model.isSuccess = db.Delete<GridTable>(id);                model.respnseInfo = model.isSuccess ? "删除成功": "删除失败";                returnJson(model);            }        }        [HttpPost]        publicJsonResult Add(GridTable gt)        {            using(SqlSugarClient db = SugarDao.GetInstance())            {                stringmessage = string.Empty;                varisValid = ValidationSugar.PostValidation("validate_key_grid_index", outmessage);                ActionResultModel<string> model = newActionResultModel<string>();                if(isValid)//后台验证数据完整性                {                    model.isSuccess = db.Insert(gt) != DBNull.Value;                    model.respnseInfo = model.isSuccess ? "添加成功": "添加失败";                }                else{                    model.isSuccess = false;                    model.respnseInfo = message;                }                returnJson(model);            }        }        [HttpPut]        publicJsonResult Edit(GridTable gt)        {            using(SqlSugarClient db = SugarDao.GetInstance())            {                ActionResultModel<string> model = newActionResultModel<string>();                stringmessage = string.Empty;                varisValid = ValidationSugar.PostValidation("validate_key_grid_index", outmessage);                if(isValid)//后台验证数据完整性                {                    model.isSuccess = db.Update<GridTable>(gt, it => it.id == gt.id);                    model.respnseInfo = model.isSuccess ? "编辑成功": "编辑失败";                }                else{                    model.isSuccess = false;                    model.respnseInfo = message;                }                returnJson(model);            }        }        [OutputCache(Duration = 0)]        publicJsonResult Data(GridSearchParams pars)        {            using(SqlSugarClient db = SugarDao.GetInstance())            {                if(pars.sortdatafield == null) { //默认按id降序                    pars.sortdatafield = "id";                    pars.sortorder = "desc";                }                Sqlable sable = db.Sqlable().Form<GridTable>("g");//查询表的sqlable对象                varmodel = JQXGrid.GetWidgetsSource<Models.GridTable>(sable, pars);//根据grid的参数自动查询                returnJson(model, JsonRequestBehavior.AllowGet);            }        }    }} | 
Razor视图
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | @{    ViewBag.Title = "Index";    Layout = "~/Views/Shared/_Layout.cshtml";}@usingJQWidgetsSugar@section head{    <script src="/Content/My97DatePickerBeta/My97DatePicker/WdatePicker.js"type="text/javascript"></script>    <link href="/Content/My97DatePickerBeta/My97DatePicker/skin/WdatePicker.css"rel="stylesheet"        type="text/css"/>    <script src="/Content/jquery-validation-1.13.1/dist/jquery.validate.min.js"type="text/javascript"></script>    <link href="/Content/jquery-validation-1.13.1/validation.sugar.css"rel="stylesheet"        type="text/css"/>    <script src="/Content/jquery-validation-1.13.1/validation.sugar.js"type="text/javascript"></script>    <script type="text/javascript">        //添加        function add(row) {            save(row, true);        }        //编辑        function edit(row) {            save(row, false);        }        //删除        function del(row) {            if(row == null) {                jqxAlert('请选择一条记录!')            } else{                jqxDelete({ gridSelector: "#netgrid",                    url: "/Grid/Del",                    data: { id: row.id }                });            }        }        function save(row, isAdd) {            varisEdit = !isAdd;            if(isEdit) {                if(row == null) {                    jqxAlert('请选择一条记录!')                    return;                }            }            //弹出框            jqxWindow("#editbox", isAdd?"添加":"编辑", 400, "auto");            //美化 button            $("#editbox button").jqxButton();            //取消事件            $('#cancel').unbind();            $('#cancel').on('click', function (e) {                $("#editbox").jqxWindow("close")            });            if(isAdd) {                //清空表单                $("#frmtable").formClear();            } else{                //格日化日期                row.date = $.convert.toDate(row.date, "yyyy-MM-dd")                //通过JSON自动填充表单,也可以自已实现                $("#frmtable").formFill({ data: row })            }            //确定事件            $('#save').unbind();            $('#save').on('click', function (e) {                factory.ajaxSubmit(function () {                    varurl = isAdd ? "/grid/add": "/grid/edit";                    vartype = isAdd ? "post": "put";                    $("#frmtable").ajaxSubmit({                        url: url,                        type: type,                        success: function (msg) {                            if(msg.isSuccess == false) {                                jqxAlert(msg.respnseInfo);                            }                            $("#netgrid").jqxDataTable('updateBoundData');                            $("#editbox").jqxWindow("close")                        }, error: function (msg) {                            console.log(msg);                        }                    })                });            });        }        //绑定验证        $(function () {            window.factory = newvalidateFactory($("form"), "<img src=\"/Content/jquery-validation-1.13.1/error.png\" />");            factory.init();        });    </script>    @Html.Raw(Model)}<div id="netgrid"></div><div id="editbox"class="hide">    <div class="savetable">        <form id="frmtable"class="form">        <table style="table-layout: fixed; border-style: none;">            <tr>                <td align="right">                    名称:                </td>                <td align="left">                    <input id="id"name="id"type="hidden"value="0"/>                    <input id="name"name="name"type="text"/>                </td>            </tr>            <tr>                <td align="right">                    产品名:                </td>                <td align="left">                    <input id="productname"name="productname"type="text"/>                </td>            </tr>            <tr>                <td align="right">                    数量:                </td>                <td align="left">                    <input id="quantity"name="quantity"type="text"/>                </td>            </tr>            <tr>                <td align="right">                    时间:                </td>                <td align="left">                    <input id="date"class="Wdate"onclick="WdatePicker()"name="date"type="text"/>                </td>            </tr>            <tr>                <td>                </td>                <td>                    <br />                    <button id="save"type="button">                        保存</button>                    <button style="margin-left: 5px;"type="button"id="cancel">                        取消</button>                </td>            </tr>        </table>        </form>    </div></div>@Html.Raw(ViewBag.validationBind) | 
例子不是很难,就是最基本的增、删、查、改。
功能虽然简单但是也考虑到了很多问题比如: 前端加后端的双向验证、代码扩展性强、语法简洁、异常的处理等。
DEMO下载地址:https://github.com/sunkaixuan/JQWidgetsSugar
原文链接:http://www.cnblogs.com/sunkaixuan/p/4703345.html
ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets(转)的更多相关文章
- ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets
		jqwidgets.js: 是一个功能完整的框架,它具有专业的可触摸的jQuery插件.主题.输入验证.拖放插件.数据适配器,内置WAI-ARIA(无障碍网页应用)可访问性.国际化和MVVM模式支持. ... 
- ASP.NET MVC快速开发框架FastExecutor开发全过程感受及总结
		困境 追溯到2018年5月份,是个炎热的夏天,毕业后1年7个月我提出了离职,原因是受不了原来公司过度的封装框架感觉一年多毫无进步与实施天天轰炸般的电话,偶然间出去面试了一次发现自己知识真的是比较局限, ... 
- ASP.NET MVC快速开发框架清新简洁界面设计,有兴趣可以模仿参考
		软件的用户体验很重要,要抓住用户的心,这篇博文分享一下最近一个项目的UI设计. 我做UI设计是从用户的角度出发的,要去揣摩用户的习惯. 大部分用户都是使用windows操作系统,所以我这套软件的风格也 ... 
- MVC 快速开发框架
		ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets jqwidgets.js: 是一个功能完整的框架,它具有专业的 ... 
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
		目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ... 
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
		目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ... 
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
		目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ... 
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
		目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ... 
- 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)
		目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ... 
随机推荐
- js-JavaScript高级程序设计学习笔记6
			第八章 BOM 1.BOM的核心对象是window,他表示浏览器的一个实例.在浏览器中,window对象有双重角色,它既是通过JS访问浏览器窗口的一个接口,又是ES规定的Global对象. 2.定义全 ... 
- 【BZOJ-3895】取石子       记忆化搜索 + 博弈
			3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ... 
- 【bzoj1034】 ZJOI2008—泡泡堂BNB
			http://www.lydsy.com/JudgeOnline/problem.php?id=1034 (题目链接) 题意 田忌赛马.. Solution 贪心. 1.若A队最弱的比B队最弱的强,先 ... 
- bzoj4318OSU &tyvj1952 Easy
			之前做tyvj1952Easy(给定一个序列,每个位置有一定的概率是1或0,求极长连续1的长度平方期望),用的做法是求出"全1子串的期望个数".假如每一段极长连续1分别长x1,x2 ... 
- ELF Executable Reconstruction From A Core Image
			catalog . INTRODUCTION . THE PROCESS IMAGE . THE CORE IMAGE . EXECUTABLE RECONSTRUCTION . FAILURES I ... 
- A.Kaw矩阵代数初步学习笔记 8. Gauss-Seidel Method
			“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ... 
- django入门记录 2
			1. 创建一个app, python manage.py startapp appname 2. 设计model,在appname/目录下编辑好model 3. 检测model的修改,python ... 
- MooseFs-分布式文件系统系列(二)之安装总结
			preface 上篇博客写了如何安装MFS,那么现在就说说经验总结把 安装方式有源码和yum安装,在官网地址:https://moosefs.com/download/centosfedorarhel ... 
- 使用chrome查看网页上效果的实现方式
			使用chrome查看网页上效果的实现方式 chrome是一个极为强大的工具,很多时候,我们不知道一个效果怎么实现的,我们完全可以找到响应的网页,然后找到其html文件,和js文件,查看源码,获得其实现 ... 
- sublime text3 --前端工程师必备神器
			sublime text3 --前端工程师必备神器 导读目录: 下载与Emmet插件安装 sublime text3 中cssrem安装与使用 sublime Text 3的中文文件名显示为方框的问题 ... 
