EasyUI +MVC +EF实现增删改查
OA项目的框架已经搭建好了,接下来就是在这个框架下完成相应的业务的编码,接下来实现UserInfo页面的增删改查。
1.首先先谈一下遇到的一个框架上的问题:提示EF版本不一致之类的问题,主要是解决方案的版本中添加的EF的版本不一致造成的
解决办法:
1. 工具 -> 库程序包管理器 -> 管理解决方案的nuget程序包
2. 在选中已安装的包中找到EntityFramework,选中后,点击"更新"按钮,或者直接安装,后面会弹出提示更新的项目类库
3. 选择要更新的项目(一般会自动默认选择需要更新的项目),点击"确定"按钮
4. 等待更新完毕,解决。
2.前台代码
- <script type="text/javascript">
- $(function () {
- loadData();
- });
- //展示数据
- function loadData() {
- $('#tt').datagrid({
- url: '/UserInfo/GetUserInfo',
- type:"post",
- title: '用户数据表格',
- width: ,
- height: ,
- fitColumns: true, //列自适应
- nowrap: false,
- idField: 'ID',//主键列的列明
- loadMsg: '正在加载用户的信息...',
- pagination: true,//是否有分页
- singleSelect: false,//是否单行选择
- pageSize: ,//页大小,一页多少条数据
- pageNumber: ,//当前页,默认的
- pageList: [, ,],
- queryParams: {},//往后台传递参数
- columns: [[//c.UserName, c.UserPass, c.Email, c.RegTime
- { field: 'ck', checkbox: true, align: 'left', width: },
- { field: 'ID', title: '编号', width: },
- { field: 'UName', title: '姓名', width: },
- { field: 'UPwd', title: '密码', width: },
- { field: 'Remark', title: '备注', width: },
- {
- field: 'SubTime', title: '时间', width: , align: 'right',
- formatter: function (value, row, index) {
- return (eval(value.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"))).pattern("yyyy-M-d");
- }
- }
- ]],
- toolbar: [{
- id: 'btnGet',
- text: '添加',
- iconCls: 'icon-add',
- handler: function () {
- AddUserInfo();
- }
- },
- {
- id: 'btnDelete',
- text: '删除',
- iconCls: 'icon-remove',
- handler:
- function () {
- deleteUserInfo();
- }
- },
- {
- id: 'btnEdit',
- text: '编辑',
- iconCls: 'icon-edit',
- handler:
- function () {
- EditUserInfo();
- }
- }
- ],
- });
- }
- //删除数据
- function deleteUserInfo() {
- var rows = $('#tt').datagrid('getSelections');
- if (!rows || rows.length == ) {
- //alert("请选择要修改的商品!");
- $.messager.alert("提醒", "请选择要删除的记录!", "error");
- return;
- }
- else
- {
- //datagrid是ajax操作,界面没有刷新,所以datagrid会记录上一次操作的id,然后拼接起来发送给服务端,
- //获取要删除的id
- if (confirm("确定要删除吗")) {
- var length = rows.length;
- var idStr = "";
- for (var i = ; i < length; i++) {
- idStr = idStr + rows[i]["ID"] + ',';
- }
- //注意最后一个多了一个逗号
- $.post("/UserInfo/Delete", { "num": idStr }, function (data) {
- if (data == "OK") {
- // loadData();这样将会加载到第一页了
- $('#tt').datagrid('reload');
- $('#tt').datagrid('clearSelections');
- }
- else if (data == "NO") {
- $.messager.alert("提醒", "删除失败", "error");
- }
- })
- }
- }
- }
- //添加数据
- function AddUserInfo()
- {
- $('dd').css("display","block")
- $('#dd').dialog({
- resizable: false,
- title:"添加用户",
- buttons: [{
- text: '确定',
- iconCls: 'icon-ok',
- handler: function () {
- //提交前进行表单的验证
- $("#addForm").submit();
- }
- }, {
- text: '取消',
- iconCls:'icon-cancel',
- handler: function () {
- $('#dd').dialog('close');
- }
- }]
- });
- }
- function AddUser(data)
- {
- if (data == "OK")
- {
- $('#tt').datagrid('reload');
- $("#addForm input").val("");
- $("#dd").dialog('close');
- }
- else if (data == "NO")
- {
- alert("添加失败");
- }
- }
- //修改数据
- function EditUserInfo()
- {
- //判断是否选中
- var selections=$("#tt").datagrid("getSelections");
- if (!selections || selections.length != )
- {
- $.messager.alert("提醒", "请选中一条记录", "error");
- return;
- }
- //获取到数据填充表格
- var selectionId =selections[].ID;
- $.post("/UserInfo/GetEditData", { "id": selectionId }, function (data) {
- //填充数据
- $("#ID").val(data.ID);
- $("#DelFlag").val(data.DelFlag);
- $("#UName").val(data.UName);
- $("#UPwd").val(data.UPwd);
- $("#Remark").val(data.Remark);
- $("#Sort").val(data.Sort);
- $("#SubTime").val(formatTime(data.SubTime));
- $("#editDiv").css("display", "block");
- $('#editDiv').dialog({
- resizable: false,
- title: "修改用户",
- buttons: [{
- text: '确定',
- iconCls: 'icon-ok',
- handler: function () {
- //提交前进行表单的验证
- $("#editForm").submit();
- }
- }, {
- text: '取消',
- iconCls: 'icon-cancel',
- handler: function () {
- $("#editDiv").dialog("close")
- }
- }]
- });
- })
- }
- function EditUser(data)
- {
- if (data == "OK") {
- //关闭弹窗
- //reload datagrid
- $("#tt").datagrid("reload");
- $("#editDiv").dialog("close")
- }
- else {
- $.messager.alert("提醒", "修改失败", "error");
- }
- }
- //时间解析
- function formatTime(val) { //解析日期字段调用此函数即可。
- var re = /-?\d+/;
- var m = re.exec(val);
- var d = new Date(parseInt(m[]));
- return d.pattern("yyyy-M-d");
- }
- </script>
- </head>
- <body>
- <div>
- <table id="tt" style="width: 700px;" title="标题,可以使用代码进行初始化,也可以使用这种属性的方式" iconcls="icon-edit"></table>
- </div>
- <!------添加数据表单-------->
- <div id="dd" icon="icon-save" style="padding:5px;width:400px;height:200px;display:none;">
- @using (Ajax.BeginForm("AddUser", "UserInfo", new AjaxOptions() { HttpMethod = "post", OnSuccess = "AddUser" }, new { id = "addForm" }))
- {
- <table>
- <tr><td>姓名</td><td><input type="text" name="UName"></td></tr>
- <tr><td>密码</td><td><input type="password" name="UPwd"></td></tr>
- <tr><td>备注</td><td><input type="text" name="Remark"></td></tr>
- <tr><td>排序</td><td><input type="text" name="Sort"></td></tr>
- </table>
- }
- </div>
- <!------------------修改数据表单------此时需要重新查库,因为此时展示的数据不全---------------->
- <div id="editDiv" icon="icon-save" style="padding:5px;width:400px;height:200px;display:none;">
- @using (Ajax.BeginForm("EditUserInfo", "UserInfo", new AjaxOptions() { HttpMethod = "post", OnSuccess = "EditUser" }, new { id = "editForm" }))
- {
- <table>
- <input type="hidden" id="ID" name="ID">
- <input type="hidden" id="SubTime" name="SubTime">
- <input type="hidden" id="DelFlag" name="DelFlag">
- <!--上面的两条是不允许修改的-->
- <tr><td>姓名</td><td><input type="text" id="UName" name="UName"></td></tr>
- <tr><td>密码</td><td><input type="password" id="UPwd" name="UPwd"></td></tr>
- <tr><td>备注</td><td><input type="text" id="Remark" name="Remark"></td></tr>
- <tr><td>排序</td><td><input type="text" id="Sort" name="Sort"></td></tr>
- </table>
- }
- </div>
- </body>
- </html>
3.后台代码
- public class UserInfoController : Controller
- {
- //
- // GET: /UserInfo/
- /// <summary>
- /// 分页展示数据
- /// </summary>
- /// <returns></returns>
- IBLL.IUserInfoService bll = new BLL.UserInfoService();
- public ActionResult Index()
- {
- return View();
- }
- /// <summary>
- /// 获取用户的数据
- /// </summary>
- /// <returns></returns>
- public ActionResult GetUserInfo()
- {
- int pageIndex = Request["page"] != null ? int.Parse(Request["page"]) : ;
- int pageSize = Request["rows"] != null ? int.Parse(Request["rows"]) : ;
- int totalCount;
- short delFlag = (short)DelFlagEnum.Noraml;
- IQueryable<UserInfo> userInfoList = bll.LoadPageEntity<int>(pageSize, pageIndex, out totalCount, u => u.DelFlag == delFlag, u => u.ID, true);
- var tempList = userInfoList.Select(u => new { ID = u.ID, UName = u.UName, UPwd = u.UPwd, SubTime = u.SubTime, Remark = u.Remark });
- //从demo中可以看出返回的数据主要放在rows和total中
- return Json(new { rows = tempList, total = totalCount });
- }
- /// <summary>
- /// 删除数据
- /// </summary>
- /// <returns></returns>
- public ActionResult Delete()
- {
- string nums = Request["num"].ToString();
- string[] numList = nums.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
- List<int> numbers = numList.Select(num => int.Parse(num)).ToList();
- bool res = bll.DeleteUserInfoList(numbers);
- if (res)
- {
- return Content("OK");
- }
- else
- return Content("NO");
- }
- /// <summary>
- /// 添加数据
- /// </summary>
- /// <param name="userInfo"></param>
- /// <returns></returns>
- [HttpPost]
- public ActionResult AddUser(UserInfo userInfo)
- {
- userInfo.SubTime = DateTime.Now;
- userInfo.ModifiedOn = DateTime.Now;
- userInfo.DelFlag = (short)DelFlagEnum.Noraml;
- bll.AddEntity(userInfo);
- if (userInfo != null)
- return Content("OK");
- else
- return Content("NO");
- }
- /// <summary>
- /// 修改数据
- /// </summary>
- /// <returns></returns>
- public ActionResult GetEditData()
- {
- int id = int.Parse(Request["id"]);
- UserInfo userInfo = bll.LoadEntity(u => u.ID == id).First();
- return Json(userInfo, JsonRequestBehavior.AllowGet);
- }
- public ActionResult EditUserInfo(UserInfo userInfo)
- {
- userInfo.ModifiedOn = DateTime.Now;
- bll.EditEntity(userInfo);
- return Content("OK");
- }
- }
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实现增删改查的更多相关文章
- MVC+EF 的增删改查操作
1. //创建EF映射对象数据集 static Models.db_JiaoYouEntities DbDeleteData = new Models.db_JiaoYouEntities(); 2. ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
一.用myEclipse初始化Web项目 新建一个web project: 二.创建包 controller //控制类 service //服务接口 service.impl //服务 ...
- EF实现增删改查
从来没想到过能在这个上面翻车,感慨自学没有培训来得系统啊,废话不多说 ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一 ...
- [.NET源码] EF的增删改查
EF的增删改查 创建上下文对象:WordBoradEntities db = new WordBoradEntities(); 一.添加: //1.1创建实体对象 User uObj = new Us ...
- http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htm ASP.NET从零开始学习EF的增删改查
http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htmlASP.NET从零开始学习EF的增删改查
- EasyUI + Spring MVC + hibernate实现增删改查导入导出
(这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...
- MVC学习-用EF做增删改查
在做增删改查先,先介绍几个知识点: 1.代理类 在将对象方法EF数据上下文时,EF会为该对象封装 一个代理类对象, 同时为该对象的每一个属性添加一个标志:unchanged, 当对该对象某个属性进行操 ...
随机推荐
- 第二百八十九节,MySQL数据库-ORM之sqlalchemy模块操作数据库
MySQL数据库-ORM之sqlalchemy模块操作数据库 sqlalchemy第三方模块 sqlalchemysqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API ...
- AngularJS开发经验
AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得是小花招)来让 ...
- Linux Vi/Vim 的使用及实例
什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是 ...
- Javascript的setTimeOut和setInterval的定时器用法
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则是在每隔指定的毫秒数循环调用函数或表达式, 直到 clearInterval把它清除.也就是说se ...
- PHP curl_setopt函数用法介绍上篇
最近,学习与实践了php中curl的知识点.在此做个初步的总结: 先看看对于它的基本介绍: curl_setopt函数是php中一个重要的函数,它可以模仿用户的一些行为,如模仿用户登录,注册等等一些用 ...
- (转)JavaScript内存模型
JavaScript对象内存模型 转自:http://blog.csdn.net/u010425776/article/details/53617292 推荐-JavaScript作用域链内存模型: ...
- c++ define的用法(转)
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...
- jquery获取点击控件的绝对位置简单实例
在使用jquery的过程中,想取得当前点击input的绝对位置而去显示一个div,jquery本身提供offset和position这个两个方法,但position官方解释是relative to t ...
- python2.0_s12_day9_协程&Gevent协程
Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 协程 1.协程,又 ...
- partition的分配策略简单代码实现
先说说partition的好处:Partition的好处是可以并发的获取同类数据,提高效率. 第一步需要实现Partitioner对象. public class ProducerPartitione ...