房号范围模糊查询

房号范围模糊查询

··························································

开发工具:Visual Studio 2015

关键技术:C#MVC、JavaScript

作者:邵亮华

撰写时间:2019-02-24

··························································

 

一般情况下,范围查询都有两个可输入文本值的文本框,那么在控制器编写数据绑定代码时就得提供两个参数接收页面传过来的值(求范围查询就是求在这个区间内的数据集)

RoomNum1、RoomNum2直接通过页面输入房号传递来的参数,进行数据查询整一条房间信息,通过ToList()形成数组(原理相当于查询房间ID,弊端就是如果房号的数据错误就无法达到想要的效果,而且输入的时候RoomNum1<RoomNum2才能搜索,否则无法执行,所以HTML的js提供解决方法

控制器

public ActionResult SelectNoRentRoomGLAll(BsgridPage bsgridPage, string RoomNum1, string RoomNum2, Int16 RoomStateID)

        {

var listNoRentAll = (from tbRoomWX in myModels.RGL_RoomWX

             join tbStateCause in myModels.base_StateCause on tbRoomWX.StateCauseID

            equals tbStateCause.StateCauseID

             join tbRoomState in myModels.base_RoomState on tbStateCause.RoomStateID equals tbRoomState.RoomStateID

              join tbRoom in myModels.system_Room on tbRoomWX.RoomID equals tbRoom.RoomID

                                select new RoomWXinfor

                                {

                                    RoomWXID = tbRoomWX.RoomWXID,

                                    RoomStateID = tbStateCause.RoomStateID,

                                    RoomStateMC = tbRoomState.RoomStateMC,

                                    StateCauseID = tbRoomWX.StateCauseID,

                                    StateCause= tbStateCause.StateCause,

                                    RoomID = tbRoomWX.RoomID,

                                    RoomNum = tbRoom.RoomNum,

                                }).ToList();

房号的范围查询

            if (!string.IsNullOrEmpty(RoomNum1) && !string.IsNullOrEmpty(RoomNum2))

            {

 直接通过页面输入房号传递来的参数,进行数据查询整一条房间信息,通过ToList()形成区间数组

如先通过传递的房号值从数据库查询房间的某条切确的房间信息,申明两个变量roomID1、roomID2,最后在多表查询Linq语句的数据集筛选出范围:

如果roomID1=3,roomID2=6

listNoRentAll的多表查询数据集 =1  2  [3  4  5  6]  7  8  9

(由于RoomNum是string类型,无法使用"< 、=",只能通过相房号的信息查询房间ID,弊端就是如果房号的数据错误就无法达到想要的效果;而且如果输入的值超出范围,数据库没有这个数据就会报错)

                var roomID1 = myModels.system_Room.Where(M => M.RoomNum == RoomNum1).ToList();

                var roomID2 = myModels.system_Room.Where(M => M.RoomNum == RoomNum2).ToList();

                listNoRentAll = listNoRentAll.Where(m => m.RoomID >= roomID1[0].RoomID && m.RoomID <= roomID2[0].RoomID).ToList();

            }

 

            if (RoomStateID > 0)

            {

                listNoRentAll = listNoRentAll.Where(m => m.RoomStateID == RoomStateID).ToList();

            }

            int count = listNoRentAll.Count();

            List<RoomWXinfor> listRoomWXinfor = listNoRentAll.OrderByDescending(m => m.RoomID)

                .Skip(bsgridPage.GetStartIndex())

                .Take(bsgridPage.pageSize).ToList();

            Bsgrid<RoomWXinfor> bsgrid = new Bsgrid<RoomWXinfor>

            {

                success = true,

                totalRows = count,

                curPage=bsgridPage.curPage,

                data= listRoomWXinfor

            };           

            return Json(bsgrid, JsonRequestBehavior.AllowGet);

        }

 

HTML

由于这的范围查询方法存在一些缺陷:比如

1、不是直接通过房号搜索,而是通过房号ID进行查询、在控制器的条件查询语句

2、RoomNum1<RoomNum2才能查询

但是在页面的js提供解决方法:

 

在页面设计时文本框用正则表达式限制只能输入数字

<input type="text" class="form-control" id="RoomNum_1" name="RoomNum"  onkeyup="this.value=this.value.replace(/\D/g,'')"/>

 

在页面的查询语句判断如果 (参数RoomNum1)>(参数RoomNum2)就将它们的值互相调换过来

先声明一个null的变量temp作为容器便可以腾出空间进行值得调换,再将RoomNum_2的值赋给temp,然后将RoomNum_1的值赋给RoomNum_2,最后temp的值赋给RoomNum_1,就可以达到值互相调换的效果

 

        function searchRoomWX() {

            var RoomNum_1 = $("#RoomNum_1").val();

            var RoomNum_2 = $("#RoomNum_2").val();

            if (parseInt(RoomNum_1) > parseInt(RoomNum_2)) {

                var temp = "";          //null的变量temp

                temp = RoomNum_2;      //temp== RoomNum_2,RoomNum_2==null

                RoomNum_2 = RoomNum_1; //RoomNum_2== RoomNum_1,RoomNum_1==null

                RoomNum_1 = temp;      //RoomNum_1== RoomNum_2

            }

            var RoomStateID = $("#RoomState").val();

            if (RoomStateID == "" || RoomStateID == undefined) {

                RoomStateID = 0;

            }

控制器的参数与页面的参数拼接查询

   tbRoomWXInfor.search("RoomNum1=" + RoomNum_1 + "&RoomNum2=" + RoomNum_2 + "&RoomStateID=" + RoomStateID);

        }

如图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值