作者:超级小贱贱
这次的文献内容,打算讲解一下近期研究出来的一种方法,就是将数据移进Seesion中,也就是添加嘛,这种功能一般用在将A表里的某条数据想转移到另外一张B表里面,比如说关于药品这个东西吧,A药品表里面的药品突然想转移到B药品表里面,那么就可以通过选中那一行的药品数据点击添加就可以完成转移,但有个问题就是,假如操作人员不小心点错了怎么办?这就关系到本次的主题:Session!如果是因为上述问题,那么我们可以先将数据暂时添加到Session中,只有在点击保存的时候,才会彻底的将Session里的数据保存到数据库中并可以显示出来,下面是今天要讲解的例子。
还是老样子,先从控制器开始,创建好标题public ActionResult ChangeRoom3(LayuiTablePage layuiTablePage【封装的参数】, string RoomIDs【传递过来的参数】){ },首先声明一个表List listRoomVo = new List();【这里的是自己创建的一个类】。接着,判断那个传递过来的参数RoomIDs,if (!string.IsNullOrEmpty(RoomIDs))如果RoomIDs不为空,则对拼接好的id进行分割string[] roomids = RoomIDs.Split(’;’);分割字符为(’;’)。然后用foreach循环,在()后面声明一个变量foreach (string roomid in roomids),接着将(roomid)转换为等效的32位代符号证书的形式,在等于=intRoomID:int RoomID = Convert.ToInt32(roomid);其次在用一个try……catch来捕捉错误,这里注意一下,要先查询一遍数据,然后在给个foreach循环,里面在try……catch判断一下数据,最后在通过最大的try……catch捕获错误,这样的目的是为了确保数据的无误性和完整性,首先查询数据的话草草的过了吧,
因为最后是以表格的形式出现,所以用ToList(查询出数据并转换为List列表的方法);
接着就是foreach循环,声明一下room3这个变量(var room3 in varLinq){
RoomVo room = new RoomVo(); new一张新表
关键地方来了,try一下{
room.RoomName = room3.RoomName;
room.RoomNumber = room3.RoomNumber;
room.Subsuribe = room3.Subsuribe;
room.RoomID = room3.RoomID;
listRoomVo.Add(room);
Session["ChangeRoom3"] = listRoomVo;
将数据等换好,Add新增信息之后,一定要将数据保存到Session中,[ ]里面的Session名可以自定义起好,最后在等于开头声明的那张表listRoomVo就搞定了。
最后呢,在给数据进行分页处理,
控制器的代码就大功告成!!!
在来到视图层这边,加载和初始化两张表格就略过去吧,主要是两张表的ID分别为“tabRoom1”和“tabRoom3”,还有监听当行事件一定不要搞错,如果对应的表格加载事件ID弄错了,连数据都没有岂不是很尴尬,然后就是监听单行事件,就算有数据,如果获取不到你想添加过去的数据那一行的话,那之前的代码就都会白写了。徒劳,所以一定要注意这两个地方。
接下来就选择到添加的那个按钮点击事件,给它一个加载方法function TJCRoom3() {,先声明一个变量var checkStatus = layuiTable.checkStatus(“tabRoom1”);,然后输出它console.log(checkStatus);接着用个if判断一下它的长度if (checkStatus.data.length > 0) {,声明一个空的变量,目的是为了存放选中行的时候获取到的所有id值,再用一个for循环var i = 0; i < checkStatus.data.length; i++) {console.log(checkStatus.data[i].RoomID);,关键的地方又来了,RoomIDs += checkStatus.data[i].RoomID + “;”;//拼接字符串,还记得在控制器那边给的分割字符串的方法吗,在这里最后加个";“是为了方便在控制器那边分割掉,比如说你接收到了3个id,分别是“1,2,3”,而在代码里的显示则是这样的:1;2;3;然后在控制器那边处理掉之后,则是”1” “2” “3”,假如说你不去掉最后一个”;"的话,则出来的结果必定会产生一个空的值给你,所以一定要处理好这些细节,然后在用substring()方法来提取字符串中介于两个指定下标之间的字符RoomIDs = RoomIDs.substring(0, RoomIDs.length - 1);,最后在给个方法级渲染(layui插件功能)
tabRoom3.reload({
url: "ChangeRoom3",
where: {RoomIDs: RoomIDs},
page: {curr: 1 }---》重新从第一页开始
});
然后就大功告成了,下面是效果图