OA项目的框架已经搭建好了,接下来就是在这个框架下完成相应的业务的编码,接下来实现UserInfo页面的增删改查。

1.首先先谈一下遇到的一个框架上的问题:提示EF版本不一致之类的问题,主要是解决方案的版本中添加的EF的版本不一致造成的

解决办法:

1. 工具 -> 库程序包管理器 -> 管理解决方案的nuget程序包

2. 在选中已安装的包中找到EntityFramework,选中后,点击"更新"按钮,或者直接安装,后面会弹出提示更新的项目类库

3. 选择要更新的项目(一般会自动默认选择需要更新的项目),点击"确定"按钮

4. 等待更新完毕,解决。

2.前台代码

  1. <script type="text/javascript">
  2. $(function () {
  3.  
  4. loadData();
  5. });
  6. //展示数据
  7. function loadData() {
  8. $('#tt').datagrid({
  9. url: '/UserInfo/GetUserInfo',
  10. type:"post",
  11. title: '用户数据表格',
  12. width: ,
  13. height: ,
  14. fitColumns: true, //列自适应
  15. nowrap: false,
  16. idField: 'ID',//主键列的列明
  17. loadMsg: '正在加载用户的信息...',
  18. pagination: true,//是否有分页
  19. singleSelect: false,//是否单行选择
  20. pageSize: ,//页大小,一页多少条数据
  21. pageNumber: ,//当前页,默认的
  22. pageList: [, ,],
  23. queryParams: {},//往后台传递参数
  24. columns: [[//c.UserName, c.UserPass, c.Email, c.RegTime
  25. { field: 'ck', checkbox: true, align: 'left', width: },
  26. { field: 'ID', title: '编号', width: },
  27. { field: 'UName', title: '姓名', width: },
  28. { field: 'UPwd', title: '密码', width: },
  29. { field: 'Remark', title: '备注', width: },
  30. {
  31. field: 'SubTime', title: '时间', width: , align: 'right',
  32. formatter: function (value, row, index) {
  33. return (eval(value.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"))).pattern("yyyy-M-d");
  34. }
  35. }
  36. ]],
  37. toolbar: [{
  38. id: 'btnGet',
  39. text: '添加',
  40. iconCls: 'icon-add',
  41. handler: function () {
  42. AddUserInfo();
  43. }
  44. },
  45. {
  46. id: 'btnDelete',
  47. text: '删除',
  48. iconCls: 'icon-remove',
  49. handler:
  50. function () {
  51. deleteUserInfo();
  52. }
  53. },
  54. {
  55. id: 'btnEdit',
  56. text: '编辑',
  57. iconCls: 'icon-edit',
  58. handler:
  59. function () {
  60. EditUserInfo();
  61. }
  62. }
  63. ],
  64. });
  65. }
  66. //删除数据
  67. function deleteUserInfo() {
  68. var rows = $('#tt').datagrid('getSelections');
  69. if (!rows || rows.length == ) {
  70. //alert("请选择要修改的商品!");
  71. $.messager.alert("提醒", "请选择要删除的记录!", "error");
  72. return;
  73. }
  74. else
  75. {
  76. //datagrid是ajax操作,界面没有刷新,所以datagrid会记录上一次操作的id,然后拼接起来发送给服务端,
  77. //获取要删除的id
  78. if (confirm("确定要删除吗")) {
  79. var length = rows.length;
  80. var idStr = "";
  81. for (var i = ; i < length; i++) {
  82. idStr = idStr + rows[i]["ID"] + ',';
  83. }
  84. //注意最后一个多了一个逗号
  85. $.post("/UserInfo/Delete", { "num": idStr }, function (data) {
  86. if (data == "OK") {
  87. // loadData();这样将会加载到第一页了
  88. $('#tt').datagrid('reload');
  89. $('#tt').datagrid('clearSelections');
  90. }
  91. else if (data == "NO") {
  92. $.messager.alert("提醒", "删除失败", "error");
  93. }
  94. })
  95. }
  96. }
  97.  
  98. }
  99. //添加数据
  100. function AddUserInfo()
  101. {
  102. $('dd').css("display","block")
  103. $('#dd').dialog({
  104. resizable: false,
  105. title:"添加用户",
  106. buttons: [{
  107. text: '确定',
  108. iconCls: 'icon-ok',
  109. handler: function () {
  110. //提交前进行表单的验证
  111. $("#addForm").submit();
  112.  
  113. }
  114. }, {
  115. text: '取消',
  116. iconCls:'icon-cancel',
  117. handler: function () {
  118. $('#dd').dialog('close');
  119. }
  120. }]
  121. });
  122.  
  123. }
  124. function AddUser(data)
  125. {
  126. if (data == "OK")
  127. {
  128. $('#tt').datagrid('reload');
  129. $("#addForm input").val("");
  130. $("#dd").dialog('close');
  131. }
  132. else if (data == "NO")
  133. {
  134. alert("添加失败");
  135. }
  136. }
  137. //修改数据
  138. function EditUserInfo()
  139. {
  140. //判断是否选中
  141. var selections=$("#tt").datagrid("getSelections");
  142. if (!selections || selections.length != )
  143. {
  144. $.messager.alert("提醒", "请选中一条记录", "error");
  145. return;
  146. }
  147. //获取到数据填充表格
  148. var selectionId =selections[].ID;
  149. $.post("/UserInfo/GetEditData", { "id": selectionId }, function (data) {
  150. //填充数据
  151. $("#ID").val(data.ID);
  152. $("#DelFlag").val(data.DelFlag);
  153. $("#UName").val(data.UName);
  154. $("#UPwd").val(data.UPwd);
  155. $("#Remark").val(data.Remark);
  156. $("#Sort").val(data.Sort);
  157. $("#SubTime").val(formatTime(data.SubTime));
  158. $("#editDiv").css("display", "block");
  159. $('#editDiv').dialog({
  160. resizable: false,
  161. title: "修改用户",
  162. buttons: [{
  163. text: '确定',
  164. iconCls: 'icon-ok',
  165. handler: function () {
  166. //提交前进行表单的验证
  167. $("#editForm").submit();
  168.  
  169. }
  170. }, {
  171. text: '取消',
  172. iconCls: 'icon-cancel',
  173. handler: function () {
  174. $("#editDiv").dialog("close")
  175. }
  176. }]
  177. });
  178.  
  179. })
  180. }
  181. function EditUser(data)
  182. {
  183. if (data == "OK") {
  184. //关闭弹窗
  185. //reload datagrid
  186. $("#tt").datagrid("reload");
  187. $("#editDiv").dialog("close")
  188. }
  189. else {
  190. $.messager.alert("提醒", "修改失败", "error");
  191. }
  192. }
  193. //时间解析
  194. function formatTime(val) { //解析日期字段调用此函数即可。
  195. var re = /-?\d+/;
  196. var m = re.exec(val);
  197. var d = new Date(parseInt(m[]));
  198. return d.pattern("yyyy-M-d");
  199. }
  200. </script>
  201.  
  202. </head>
  203. <body>
  204. <div>
  205. <table id="tt" style="width: 700px;" title="标题,可以使用代码进行初始化,也可以使用这种属性的方式" iconcls="icon-edit"></table>
  206. </div>
  207. <!------添加数据表单-------->
  208. <div id="dd" icon="icon-save" style="padding:5px;width:400px;height:200px;display:none;">
  209. @using (Ajax.BeginForm("AddUser", "UserInfo", new AjaxOptions() { HttpMethod = "post", OnSuccess = "AddUser" }, new { id = "addForm" }))
  210. {
  211. <table>
  212. <tr><td>姓名</td><td><input type="text" name="UName"></td></tr>
  213. <tr><td>密码</td><td><input type="password" name="UPwd"></td></tr>
  214. <tr><td>备注</td><td><input type="text" name="Remark"></td></tr>
  215. <tr><td>排序</td><td><input type="text" name="Sort"></td></tr>
  216. </table>
  217. }
  218. </div>
  219. <!------------------修改数据表单------此时需要重新查库,因为此时展示的数据不全---------------->
  220. <div id="editDiv" icon="icon-save" style="padding:5px;width:400px;height:200px;display:none;">
  221. @using (Ajax.BeginForm("EditUserInfo", "UserInfo", new AjaxOptions() { HttpMethod = "post", OnSuccess = "EditUser" }, new { id = "editForm" }))
  222. {
  223. <table>
  224. <input type="hidden" id="ID" name="ID">
  225. <input type="hidden" id="SubTime" name="SubTime">
  226. <input type="hidden" id="DelFlag" name="DelFlag">
  227. <!--上面的两条是不允许修改的-->
  228. <tr><td>姓名</td><td><input type="text" id="UName" name="UName"></td></tr>
  229. <tr><td>密码</td><td><input type="password" id="UPwd" name="UPwd"></td></tr>
  230. <tr><td>备注</td><td><input type="text" id="Remark" name="Remark"></td></tr>
  231. <tr><td>排序</td><td><input type="text" id="Sort" name="Sort"></td></tr>
  232. </table>
  233. }
  234. </div>
  235.  
  236. </body>
  237.  
  238. </html>

3.后台代码

  1. public class UserInfoController : Controller
  2. {
  3. //
  4. // GET: /UserInfo/
  5. /// <summary>
  6. /// 分页展示数据
  7. /// </summary>
  8. /// <returns></returns>
  9. IBLL.IUserInfoService bll = new BLL.UserInfoService();
  10.  
  11. public ActionResult Index()
  12. {
  13.  
  14. return View();
  15. }
  16. /// <summary>
  17. /// 获取用户的数据
  18. /// </summary>
  19. /// <returns></returns>
  20. public ActionResult GetUserInfo()
  21. {
  22. int pageIndex = Request["page"] != null ? int.Parse(Request["page"]) : ;
  23. int pageSize = Request["rows"] != null ? int.Parse(Request["rows"]) : ;
  24. int totalCount;
  25. short delFlag = (short)DelFlagEnum.Noraml;
  26. IQueryable<UserInfo> userInfoList = bll.LoadPageEntity<int>(pageSize, pageIndex, out totalCount, u => u.DelFlag == delFlag, u => u.ID, true);
  27. var tempList = userInfoList.Select(u => new { ID = u.ID, UName = u.UName, UPwd = u.UPwd, SubTime = u.SubTime, Remark = u.Remark });
  28. //从demo中可以看出返回的数据主要放在rows和total中
  29. return Json(new { rows = tempList, total = totalCount });
  30. }
  31.  
  32. /// <summary>
  33. /// 删除数据
  34. /// </summary>
  35. /// <returns></returns>
  36. public ActionResult Delete()
  37. {
  38. string nums = Request["num"].ToString();
  39. string[] numList = nums.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  40. List<int> numbers = numList.Select(num => int.Parse(num)).ToList();
  41. bool res = bll.DeleteUserInfoList(numbers);
  42. if (res)
  43. {
  44. return Content("OK");
  45. }
  46. else
  47. return Content("NO");
  48.  
  49. }
  50. /// <summary>
  51. /// 添加数据
  52. /// </summary>
  53. /// <param name="userInfo"></param>
  54. /// <returns></returns>
  55. [HttpPost]
  56. public ActionResult AddUser(UserInfo userInfo)
  57. {
  58. userInfo.SubTime = DateTime.Now;
  59. userInfo.ModifiedOn = DateTime.Now;
  60. userInfo.DelFlag = (short)DelFlagEnum.Noraml;
  61. bll.AddEntity(userInfo);
  62. if (userInfo != null)
  63. return Content("OK");
  64. else
  65. return Content("NO");
  66. }
  67. /// <summary>
  68. /// 修改数据
  69. /// </summary>
  70. /// <returns></returns>
  71. public ActionResult GetEditData()
  72. {
  73. int id = int.Parse(Request["id"]);
  74. UserInfo userInfo = bll.LoadEntity(u => u.ID == id).First();
  75. return Json(userInfo, JsonRequestBehavior.AllowGet);
  76. }
  77. public ActionResult EditUserInfo(UserInfo userInfo)
  78. {
  79. userInfo.ModifiedOn = DateTime.Now;
  80. bll.EditEntity(userInfo);
  81. return Content("OK");
  82. }
  83.  
  84. }

4.注意事项

1.对于错误信息:进行获取数据的时候出现不允许Get"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet。"的解决方案

(1)方案1
    $.ajax({
        type: 'POST',
        url: '/Home/AjaxGetJsonData',
        success: function (data) {
            alert(data);
        },
        error: function (error) {
            alert(error.responseText);
        }
    });

(2)方案2
return Json(new { rows=tempList ,total=totalCount},JsonRequestBehavior.AllowGet);

2.首先对于MVC来说,首先得访问一个控制器下的方法获取到展示数据的页面,获取数据应该从该控制器下面的其他的方法去获取
最好不要混在一起。

3.从easyUI 中的demo可以看出一定要将返回的数据交给rows,数据的条数返回到total

4.批量删除数据:删除的时候不能直接调用baseService中的删除方法,应该使用DBSession调用dal下面的方法,然后统一使用DbSession中的SaveChanged
同时为了保证删除后界面保持在原来的pageIndex,需要使用reload方法,同时为了删除easyUI中缓存的id,需要调用clearSelections

5.添加数据的时候,一定要进行表单的验证,使用easyUI,由于要进行刷新界面,因为是异步提交,所以没有刷新界面,表单中依然保存着原来的数据
     $("#addForm input").val("");
    
使用AjaxHelper创建表单,可以在objectAttribute中添加id,然后提交表单的时候,直接使用
     $("#id").submit();
这个效果和直接在AJax表单中写一个submit按钮是一样的

6.对于后台JavaScriptSerilizer或者return Json(),会将时间变为自1970年1月1日午夜到指定日期的毫秒数,所以需要重新将这些毫秒数计算出所在年月日

//时间解析
        function formatTime(val) {   //解析日期字段调用此函数即可。
            var re = /-?\d+/;
            var m = re.exec(val);
            var d = new Date(parseInt(m[0]));
            return d.pattern("yyyy-M-d");
        }

EasyUI +MVC +EF实现增删改查的更多相关文章

  1. MVC+EF 的增删改查操作

    1. //创建EF映射对象数据集 static Models.db_JiaoYouEntities DbDeleteData = new Models.db_JiaoYouEntities(); 2. ...

  2. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  3. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  4. SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现

    一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller        //控制类 service //服务接口 service.impl //服务 ...

  5. EF实现增删改查

    从来没想到过能在这个上面翻车,感慨自学没有培训来得系统啊,废话不多说 ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一 ...

  6. [.NET源码] EF的增删改查

    EF的增删改查 创建上下文对象:WordBoradEntities db = new WordBoradEntities(); 一.添加: //1.1创建实体对象 User uObj = new Us ...

  7. http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htm ASP.NET从零开始学习EF的增删改查

    http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htmlASP.NET从零开始学习EF的增删改查

  8. EasyUI + Spring MVC + hibernate实现增删改查导入导出

    (这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...

  9. MVC学习-用EF做增删改查

    在做增删改查先,先介绍几个知识点: 1.代理类 在将对象方法EF数据上下文时,EF会为该对象封装 一个代理类对象, 同时为该对象的每一个属性添加一个标志:unchanged, 当对该对象某个属性进行操 ...

随机推荐

  1. 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库

    MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...

  2. AngularJS开发经验

    AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得是小花招)来让 ...

  3. Linux Vi/Vim 的使用及实例

    什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是 ...

  4. Javascript的setTimeOut和setInterval的定时器用法

    setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则是在每隔指定的毫秒数循环调用函数或表达式, 直到 clearInterval把它清除.也就是说se ...

  5. PHP curl_setopt函数用法介绍上篇

    最近,学习与实践了php中curl的知识点.在此做个初步的总结: 先看看对于它的基本介绍: curl_setopt函数是php中一个重要的函数,它可以模仿用户的一些行为,如模仿用户登录,注册等等一些用 ...

  6. (转)JavaScript内存模型

    JavaScript对象内存模型 转自:http://blog.csdn.net/u010425776/article/details/53617292  推荐-JavaScript作用域链内存模型: ...

  7. c++ define的用法(转)

    #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...

  8. jquery获取点击控件的绝对位置简单实例

    在使用jquery的过程中,想取得当前点击input的绝对位置而去显示一个div,jquery本身提供offset和position这个两个方法,但position官方解释是relative to t ...

  9. python2.0_s12_day9_协程&Gevent协程

    Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 协程 1.协程,又 ...

  10. partition的分配策略简单代码实现

    先说说partition的好处:Partition的好处是可以并发的获取同类数据,提高效率. 第一步需要实现Partitioner对象. public class ProducerPartitione ...