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实现增删改查的更多相关文章

  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. 关于Cocos2d-x有些头文件无法引入或者类显示无法打开

    选中工程右键“属性”->"配置属性“->"c/c++"->"常规”->"附加包含目录"中添加“”$(EngineRo ...

  2. C++中成员变量默认private

    struct 默认是 publicclass 默认是 private

  3. C/C++,从未过时的编程语言之父

    C/C++,持续火爆的编程语言之父 --訪传智播客C/C++学院院长传智·萧峰 编程语言作为实现互联网+基础必备工具,构建着互联网行业美轮美奂的大时代.作为编程语言之父--C语言,更是如鱼得水,在甘愿 ...

  4. R语言低级绘图函数-symbols

    严格意义上将symbols 并不能算是一个低级的绘图函数,因为它不仅可以在一幅已经存在的图标上添加元素,还可以创建一张新的图表 鉴于它绘图时的灵活性,我把它归入到低级绘图函数中 symbols 可以创 ...

  5. Linux基础知识之history的详细说明

    背景:history是Linux中常会用到内容,在工作中一些用户会突然发现其安装不了某个软件,于是寻求运维人员的帮助,而不给你说明他到底做了哪些坑爹的操作.此时你第一件要做的就是要查看其history ...

  6. 实现QQ第三方登录教程(php)

    参看地址:http://www.bcty365.com/content-10-2945-1.html

  7. 设置同样字体大小,chrome浏览器有时字体偏大的解决办法(转)

    本文是找了在网上搜了好久才找到非常棒的一篇文章,很好的解决了这个问题. 原文地址:https://github.com/amfe/article/issues/10 这个特性被称做「Text Auto ...

  8. 高级选项更改MathType数学公式样式

    MathType中系统的样式有很多种,我们将通过示例来演示如何更改样式定义达到修改等式的目的.使用样式将允许你迅速且方便的获得一种格式,这种格式将使你创建的等式具有统一的风格. 以下步骤中,我们将创建 ...

  9. 合格前端系列第六弹-从指向看JavaScript

    https://my.oschina.net/qiangdada/blog/1484001

  10. VS------csc.exe已停止工作解决方法

    转载: http://blog.csdn.net/verylost/article/details/53667769 方法: 解决方法是把进程中所有的VBCSCompiler.exe进程结束掉,然后清 ...