通过Session跨页面传输

制作项目的过程中,偶尔会出现需要将数据进行跨页面传输的操作,本文就将展示如何通过Session实现跨页面传输的功能

在使用之前,可以先了解一下Session的性质与存储机制,Session只要服务器重启或超过设置的保存时间就会失效,防止因Session失效而导致的问题

一. 传输的数据

当两个页面上的数据全部来源于一个ID,可以只传输此ID,传递到指定的页面后,再次通过此ID查询.当然,如果两个页面的数据相同,也可以直接将所有数据都存储在Session中,然后在指定页面上在输出即可,本文使用的方法是通过传输决定性的数据,比如页面上的数据都决定于一个ID(页面上有一个主表和一些主表的明细表,可以通过主表的主键ID来决定此页面的信息)

二. 何时传输数据

传输数据在何时进行,需要在何操作前进行,何有讲究,如果你的代码的次序混乱,就可能无法达成预期的效果
在这里插入图片描述
图就是一个数据传输,先给Session赋值,然后再进行页面跳转,如果先跳转后赋值,会导致Session还未赋值,页面就去获取Session,然后获取到的就是上一次的Session,如果是第一次获取,就是空值.所以一定要先赋值,后跳转才能获取本次的Session

三. 创建一个Session
在这里插入图片描述

在视图层创建一个用于接收的方法,将页面传输的数据赋值给Session即可,由于本方法并不需要返回参数,所以返回值是什么都没有关系.

四. 页面跳转与加载事件

将Session赋值完成后,就可以进行页面跳转,任何方式的跳转都行,然后在跳转页面的页面加载事件中判断Session中的值是否存在(为了防止调用的Session未赋值,或者是特殊需求,比如只有当此页面跳转才回填,直接进行页面跳转则不回填等),如果跳转的页面已被打开,则你的跳转事件需要将打开的页面刷新,才会出发页面加载事件,所以直接在页面跳转之前,Session代码赋值之后,提前刷新需要被赋值的页面(需要判断被刷新的页面是否存在),如果实在不会刷新页面,可以先将需要回填值的页面关闭

五. 查询与回填

因为选用的方法是传一个ID所以需要通过ID去查询需要回填的值

在这里插入图片描述

在控制器中将Session中的值取出,由于是ID,所以将Session先转为Int类型的值,然后再存储在变量中

在这里插入图片描述

传输的数据一般可以用来界定查出的数据,一般是需要查的表(如果有多个表,如果是一对一的关系,则获取其中一个表的关系,如果是一堆多的关系,则获取一的主键ID,如果是前两种情况的混合,则获取同时与多条数据和一条数据连接的表的主键,如果没有关系,则需要获取多个主键)的主键ID
在这里插入图片描述
Session使用完后记得删除或使用别的方法,这一步的主要原因是为了防止页面关闭后再此打开,由于Session中的值依然存在,导致数据会再次回填,如果不是有特殊需求,一定要防止此结果的出现

总结:

  1. 由于Cookie不会因为服务器的关闭而消失,所以不建议通过Cookie进行跨页面的回填

  2. 如果在视图层使用Session,但未赋值,则整个获取Session的代码会为空具体效果为

var sa = @Session[“ID”] 如果Session的值为空的效果 var sa =

此方法会报错,所以在判断是否为空时,可以(仅用于整形等可以数学运算的数据类型)

(@Session[“ID”] + 0 ) > 0 如果Session的值为空的效果 (+ 0) > 0

则不会报错,且可以判断出Session中是否存在值

  1. 赋值一定要在页面跳转前才可以获取到当前赋值给Session中的值

  2. 如果回填的判断放在页面加载事件中,则需要在跳转到该页面时先刷新,否者如果此页面已被打开,则无法回填,不会刷新的可以先关闭需要跳转的页面

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值