开发工具与关键技术:MVC
作者:文泽钦
撰写时间:2019年5月3日
初步开启验证电话、手机号码,防止用户乱输入,除了数字可以输入,其他字母中文或者符号是输入不进去的:
<input type="text" class="form-control" id="IsCellphone" name="Cellphone" autocomplete="off" onkeyup='this.value=this.value.replace(/\D/gi,"")' />
保存新增的方法,获取表单里对应的值:
function saveInsert() {
//获取每个需要接收的值,每个值都需要要声明一个变量接收新增form表单里传过来的值
var employeeNumber = $("#formInsertExaminee [name='EmployeeNumber']").val();//编号
var employeeName = $("#formInsertExaminee [name='EmployeeName']").val();//姓名
var phone = $("#formInsertExaminee [name='Phone']").val();//电话
var cellphone = $("#formInsertExaminee [name='Cellphone']").val();//手机
var departmentID = $("#formInsertExaminee [name='DepartmentID']").val();//部门
var positionID = $("#formInsertExaminee [name='PositionID']").val();//职位
var address = $("#formInsertExaminee [name='Address']").val();//地址
var remark = $("#formInsertExaminee [name='Remark']").val();//备注
//电话信息验证,正则表达式:第一位数字是0开头或者是8,而且不能是字母,并且不能少于7位,大于11位数
var NumPhone = /(0|8)\d{6,10}$/;
if (!NumPhone.test(phone)) {//if如果不满足
layer.alert("电话信息有误,请输入正确的数据!", { icon: 0, title: "来自狄仁杰的关怀" });
return;
}
//电话信息验证,正则表达式:只能是1开头的,不能是字母,不能低于&大于11位数
var NumCellphone = /(1\d{10}$)/;
if (!NumCellphone.test(cellphone)) {//if如果不满足
layer.alert("手机信息有误,请输入正确的数据!", { icon: 0, title: "来自狄仁杰的关怀" });
return;
}
写到这就可以测试一下写的正则表达式写能不能匹配,我写的正则表达式还有一些小小的毛病还没有修改,我只是简单的匹配出来电话、手机号码:
//判断数据完整性,判断部门、职位id是否大于零,姓名、电话、手机、地址是否为空,不用验证为不为空的就不用判断,比如备注可以为空,就不用判断
if (departmentID > 0 && positionID > 0 && employeeNumber != "" && employeeName != "" && phone != "" && cellphone != "" && address != "") {
//信息完整,打开加载层
var layIndex = layer.load();
//提交表单
$("#formInsertExaminee").ajaxSubmit(function (returnJson) {
//关闭加载层
layer.close(layIndex);
//录入成功
if (returnJson.State) {
//关闭模态框
$("#modInsertExaminee").modal("hide");
//提示信息
layer.msg(returnJson.Text, { icon: 1, title: "来自狄仁杰的关爱" });
//刷新表格
tabEmployee.reload();
} else {
layer.alert(returnJson.Text, {
icon: 0, title: "来自狄仁杰的关爱" });
}
});
} else {
layer.alert("请填写完整数据信息!", {
icon: 0, title: "来之妲己攻略" });
}
在写保存控制器方法时需要用到一个状态类,创建一个实体类记录执行状态:
public class ReturnJsonVo{
public bool State { get; set; }// 状态
public string Code { get; set; }// 状态码
public string Text { get; set; }// 文本
public object Object { get; set; } // 附加数据
}
保存新增员工写法有点复杂,关联到用户表,要与用户表一起新增保存,但没有两张表同时保存的,先一张一张保存:
public ActionResult InsertEmployee(PW_Employee pwEmployee, PW_User pwUser) {
//记录执行状态
ReturnJsonVo returnJson = new ReturnJsonVo();
//捕获异常
try{
//查询数据库中是否存在该员工信息
//拿页面传过来的员工表与数据库的员工表对比
int cuontEmployee = (from tbEmployee in MyModels.PW_Employee
//数据库中的员工编号等于页面传过来的员工编号
where tbEmployee.EmployeeNumber == pwEmployee.EmployeeNumber
//计算查询重复员工信息条数
select tbEmployee).Count();
//如果cuontEmployee查询出来的值等于零,员工信息没有重复
if (cuontEmployee == 0) {
//查询用户表,判断是否存在该用户id
int countUser = (from tbUser in MyModels.PW_User
where tbUser.UserID == pwUser.UserID
select tbUser).Count();
//如果countUser等于零,则没有相同的用户数据
if (countUser == 0) {
//开始新增,新增顺序:先新增用户表-->再到员工表
//用户编号即是用户账号&密码
pwUser.UserNuber = pwEmployee.EmployeeNumber;
// 用户密码等于员工编号,加密保存到数据库
pwUser.Password = Common.AESEncryptHelper.Encrypt(pwEmployee.EmployeeNumber);
//新增的用户账号&密码放到用户表
MyModels.PW_User.Add(pwUser);
//保存,判断MyModels的数据是否大于零
if (MyModels.SaveChanges() > 0) {
//获取到新增的用户id要等于用户表里的用户id
var userId = pwUser.UserID;
//新增员工表
pwUser.UserID = userId;
//新增的员工信息存放到员工表
MyModels.PW_Employee.Add(pwEmployee);
if (MyModels.SaveChanges() > 0) {
returnJson.State = true;
returnJson.Text = "员工信息录入成功,获得员工一名!";
}else{
returnJson.State = false;
returnJson.Text = "员工信息保存失败!";
}
}else{
returnJson.State = false;
returnJson.Text = "用户表保存失败!";
}
}else{
returnJson.State = false;
returnJson.Text = "该员工id已被占用!";
}
} else{
returnJson.State = false;
returnJson.Text = "该员工编号已被占用!";
}
}catch (Exception) {
returnJson.State = false;//返回状态
returnJson.Text = "数据异常";//返回文本
}
return Json(returnJson, JsonRequestBehavior.AllowGet);
}
控制器与页面的方法都写完了,先要测试判断是否都正确,可以测试编号、姓名、地址随便空一个,看看会不回有提示说数据不完整,要是有提示,则证明判断是正确的,备注可以为空就不要拿来测试判断是否成功了:
public ActionResult InsertEmployee(PW_Employee pwEmployee, PW_User pwUser) {
//记录执行状态
ReturnJsonVo returnJson = new ReturnJsonVo();
//捕获异常
try{
//查询数据库中是否存在该员工信息
//拿页面传过来的员工表与数据库的员工表对比
int cuontEmployee = (from tbEmployee in MyModels.PW_Employee
//数据库中的员工编号等于页面传过来的员工编号
where tbEmployee.EmployeeNumber == pwEmployee.EmployeeNumber
//计算查询重复员工信息条数
select tbEmployee).Count();
//如果cuontEmployee查询出来的值等于零,员工信息没有重复
if (cuontEmployee == 0) {
//查询用户表,判断是否存在该用户id
int countUser = (from tbUser in MyModels.PW_User
where tbUser.UserID == pwUser.UserID
select tbUser).Count();
//如果countUser等于零,则没有相同的用户数据
if (countUser == 0) {
//开始新增,新增顺序:先新增用户表-->再到员工表
//用户编号即是用户账号&密码
pwUser.UserNuber = pwEmployee.EmployeeNumber;
// 用户密码等于员工编号,加密保存到数据库
pwUser.Password = Common.AESEncryptHelper.Encrypt(pwEmployee.EmployeeNumber);
//新增的用户账号&密码放到用户表
MyModels.PW_User.Add(pwUser);
//保存,判断MyModels的数据是否大于零
if (MyModels.SaveChanges() > 0) {
//获取到新增的用户id要等于用户表里的用户id
var userId = pwUser.UserID;
//新增员工表
pwUser.UserID = userId;
//新增的员工信息存放到员工表
MyModels.PW_Employee.Add(pwEmployee);
if (MyModels.SaveChanges() > 0) {
returnJson.State = true;
returnJson.Text = "员工信息录入成功,获得员工一名!";
}else{
returnJson.State = false;
returnJson.Text = "员工信息保存失败!";
}
}else{
returnJson.State = false;
returnJson.Text = "用户表保存失败!";
}
}else{
returnJson.State = false;
returnJson.Text = "该员工id已被占用!";
}
} else{
returnJson.State = false;
returnJson.Text = "该员工编号已被占用!";
}
}catch (Exception) {
returnJson.State = false;//返回状态
returnJson.Text = "数据异常";//返回文本
}
return Json(returnJson, JsonRequestBehavior.AllowGet);
}
控制器与页面的方法都写完了,先要测试判断是否都正确,可以测试编号、姓名、地址随便空一个,看看会不回有提示说数据不完整,要是有提示,则证明判断是正确的,备注可以为空就不要拿来测试判断是否成功了:
保存成功后,再到数据库中看看是否把刚刚新增那条数据是否真正保存到数据库:
我们再控制器那写了倒叙排序,在页面上新增的数据是在第一条数据位置上显示,数据库是根据id有小到打的排序,刚刚新增的数据id是最大的,所以可以直接看数据库中最后那条数据是否刚刚新增那条,我数据库上已经有那条数据了,证明新增成功。