关于FJDPXT系统知识点

                  关于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)

④查询信息

           关于FJDPXT系统知识点

⑤传递查询到的数据到页面

           关于FJDPXT系统知识点

⑥获取控制器传回的数据

           关于FJDPXT系统知识点

⑦回填数据(旅客信息例子)

           关于FJDPXT系统知识点

4. 表单

①layui模块的加载&初始化

②初始化表格

           关于FJDPXT系统知识点

  page: {

          limit: 10, //指定每页显示的条数

          limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50], //每页条数的选择项

     }, //开启分页

③多表查询数据           关于FJDPXT系统知识点

根据PNRID分组查询

           关于FJDPXT系统知识点

④计算数据总条数

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

            };