关于FJDPXT系统知识点
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:Adobe Dreamweaver JavaScript
作者:陈钰桃
撰写时间:2020年8月6日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一、登录页面
保证登录页面是顶级窗口(避免登录被嵌套在子页面中)
if (window.top.location.href !== window.location.href) {
window.top.location.href = window.location.href;
}
window.location.href="/PNR/StrokeDisplay/checkFlight?PNRID="+pnrID; //嵌套在主页面里
window.open("/PNR/StrokeDisplay/checkFlight?PNRID="+pnrID,"_blank"); //在浏览器里重新打开一个页面
1、点击事件跳转
方法一、配合onclick 新建一个方法
function login() {
window.location.href = "/main/main";
}
方法二、设置全局变量 var layer; 存放layui模块,方便整个页面中调用
这个方法更好 - 避免浏览器回馈 --避免可以通过返回历史记录回到登录页面或主页面
$(function () {
window.location.replace("@Url.Content("~/Main/Main")"); 新页面替代旧页面
});
方法三、设置给点击按钮一个ID,再给按钮ID绑定点击事件
window.onload = function () {
var btnSubmit = document.getElementById("btnSubmit");
btnSubmit.onclick = function () {
window.location.href = "/Main/Main";
}
}
2.关于弹出框
第一种方法、调用浏览器的弹出框
for (var i = 0; i < 10; i++) {
alert(i);
}
坏处:浏览器自带弹出框,如果过多会提示是否屏蔽,用户一旦勾选,就接收不到提示
第二种方法、比较浏览器自带的弹出框稳定
for (var i = 0; i < 10; i++) {
layer.alert("layer加载成功");
}
3.使用快捷键触发点击事件写法
$("body").keyup(function (e) {
//console.log(e.keyCode);//获取回车键的数字符
if (e.keyCode == 13) {
$("#btnSubmit").click();
}
});
4. linq 单表查询的写法
(from 自定义的表名 in Model对象.查询的表
【where 自定义的表名.字段1 关系运算符 值 【&& 自定义的表名.字段2 关系运算符 值】】
【orderby 自定义的表名.字段】
【select 自定义的表名】
【select new{[属性名1= ]自定义的表名.字段1,
[属性名2= ]自定义的表名.字段2,
[属性名3= ]自定义的表名.字段3,
....
}】
【select new 类名{ 类的属性1=自定义的表名.字段1,
类的属性2=自定义的表名.字段2,
....
}】
.Single();//查询单条数据,当没有数据或者有多条数据时会触发异常
.SingleOrDefault();//查询单条数据,当没有数据返回默认值(对象的默认值为null);当有多条数据时触发异常
.ToList();//查询多条数据并转为List
.Count();//查询有多少条数据
5. 获取表单数据
Var 自定义名称 = $(表单ID , [name=自定义名称]).val();
二、主页面
1.在进入页面前告诉浏览器文档的类型(解决弹出浏览器翻译弹框问题)
lang="en"-->英文 zh-cn-->中文简体 zh-tw中文繁体
<html lang="zh" class="loading">
2.将获取的数据传递到页面
第二种简单速度更快 不用转换数据类型,第一种数据类型转换越复杂,所要的时间越长
ViewData["jobNumber"] = jobNumber; 用户显示 第一种方法 前
ViewBag.jobNumber = jobNumber; 用户显示 第二种方法 前
3.重定向的写法
第一种、嵌套在控制器方法里面写
public ActionResult Main()
{
try
{
return View();
}
catch (Exception e)
{
Console.WriteLine(e);
//重定向
//重定向到登录页面
//return Redirect(Url.Content("~/Main/Login"));//1
return RedirectToAction("Login");//2
}
}
第二种、在执行Action方法前执行该方法
private int loginUserID = 0;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//override 继承了父类 更新了方法 OnActionExecuting作用:相当于前置或者过滤 查询文档前必须执行经过的一个方法(相当于保安)
base.OnActionExecuting(filterContext);//调用父类的一个接口
try
{
loginUserID = Convert.ToInt32(Session["userID"].ToString());
}
catch (Exception e)
{
Console.WriteLine(e);
//Result 返回
filterContext.Result = Redirect(Url.Content("~/Main/Login"));//重定向到登录页面
}
}
第三种、在执行Action方法前执行该方法(与第二种有不同)
private int userID; userID à 参数
//复写父类的该方法。执行控制器中的方法之前先执行该方法。从而实现过滤的功能。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
//验证用户登录
if (Session["userID"] == null)
{
//没有登录,重定向,不会执行后续的方法,而是直接跳转到登录页面
filterContext.Result = Redirect("/Main/Login");
}
else
{
userID = (int)Session["userID"];
}
}
三、PNR页面
1.清除session数据
不能用clear clear代表直接销毁当前的session 范围太大
remove 清除指定name的session
2.连接数据方式(用于连表查询)
inner join(内连接)-两边都要有才能连接起来[常用]
left join(左连接)-值全部来自左边的表,即左边表的值全部输出[常用]
right join(右连接)-值全部来自右边的表,即右边表的值全部输出
outer join(外连接)-取两边全部的值
全连接(用得少)-全部数字都组合一遍
3.数据筛选查询
if (!string.IsNullOrEmpty(PNRNo))
{
//只能精确查询
// tempPNRInfor = tempPNRInfor.Where(p => p.PNRNo == PNRNo);
//可模糊查询及精确查询
tempPNRInfor = tempPNRInfor.Where(p => p.PNRNo.Contains(PNRNo));
}
4.信息回填
①页面加载&初始化layui模块
layui.use(['layer'],function(){
layer = layui.layer;
…………
}
②页面发送请求
var layerIndex = layer.load();
$.post("SelectPNRInfo",
{
PNRID:pnrID
},
③控制器接收请求
public ActionResult addPassengerPage(int PNRID)
④查询信息
⑤传递查询到的数据到页面
⑥获取控制器传回的数据
⑦回填数据(旅客信息例子)
4. 表单
①layui模块的加载&初始化
②初始化表格
page: {
limit: 10, //指定每页显示的条数
limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50], //每页条数的选择项
}, //开启分页
③多表查询数据
根据PNRID分组查询
④计算数据总条数
int count = listPNRInfor.Count();
⑤在使用分页查询之前一定要进行排序
List<PNRVo> list = linq
.OrderByDescending(o => o.PNRID)
.Skip(layuiTablePage.GetStartIndex())
.Take(layuiTablePage.limit)
.ToList();
⑥构建Layui Table需要的数据类型
LayuiTableData<PNRVo> layuiTableData = new LayuiTableData<PNRVo>
{
count = totalRow,
data = list
};