页面查询状态条件保留

项目中经常会遇见在列表页面 输入一些条件之后查询后 进入详情页在返回之后希望查询的条件保留 这样不需要再去输入条件

如何做到查询状态保留?

核心思想 就是 查询之后的那些条件的值放入tempdata中  等返回这个页面的时候 控制器在通过tempdata接收
然后在把里面的值赋值给viewbag  然后页面的input 或者下拉框 进行绑定 从而达到状态保存

1:建立一个searchmodel  就是对应查询条件的一个对应实体model 其实就是为了保存
2:查询的时候ajax 把元素获取的条件内容  用一个匿名模拟查询对象model 接收
3:控制器的查询方法 把匿名对象接收
4:将model与tempdata对应关系建立
5:访问页面的时候 判断是否存在tempdata的值 如果有 就把tempdata反序列化实体model一一赋给viewbag
6: 页面把viewbag绑定 有没有值都无所谓 达到条件保留的效果
7:除了条件保存 数据也要按照保留的条件查出数据


jq:
function SearchContact() {
    
    var keyWord = $("#txtKeywords").val();
    var type = $("#emailType").val();
    var dateFrom = $("#DateFrom").val();
    var dateTo = $("#DateTo").val();
    var viewed = $("#Viewed").val();
    var replied = $("#Replied").val();
 
    var searchModel = {};
    searchModel.keyWord = keyWord;
    searchModel.type = type;
    searchModel.dateFrom = dateFrom;
    searchModel.dateTo = dateTo;
    searchModel.viewed = viewed;
    searchModel.replied = replied;
   
    $.ajax({
        xhr: function () {
            var xhr = new window.XMLHttpRequest();

          
            xhr.addEventListener("progress",
                function (evt) {
                    if (evt.lengthComputable) {
                        var percentComplete = evt.loaded / evt.total;
                        console.log(percentComplete);
                    }
                },
                false);

            return xhr;
        },
        url: '/PeonyTours/ContactUS/GetContactUSList',
        type: 'POST',
        data: { "searchJson": JSON.stringify(searchModel), "keyWord": keyWord, "type": type, "dateFrom": dateFrom, "dateTo": dateTo, "viewed": viewed, "replied": replied, "adminKey": $("#adminKey").val(), "menuId": $('#hidMenuId').val() },
        beforeSend: function () {
            $('.progress-bar').css('width', '15%');
            $('.progress').show();
        },
        success: function (result) {
            $('.progress-bar').css('width', '100%');

            $('#tbodyContact').html(result);

            setTimeout(function () { $('.progress').hide(); }, 500);
        },
        error: function () {
            alert("search failed")
        }
    });

}
  
控制器:接收处理数据的方法  接收ajax 条件 放入tempdata中
    public ActionResult SearchClientUserList()
        {
            int pageIndex = 1;
            string searchJson = Request.Form["searchJson"];

            TempData["SearchClentUser"] = searchJson;

            string key = Request.Form["adminKey"];
            ViewBag.KeyString = "?adminKey=" + key;
            var searchModel = JsonConvert.DeserializeObject<ClientUserSearchViewModel>(searchJson);
            if (!string.IsNullOrWhiteSpace(Request.Form["pageIndex"]))
            {
                pageIndex = Convert.ToInt32(Request.Form["pageIndex"]);
            }

            int num = (pageIndex - 1) * 20;
            List<ClientSiteUser> clientUserList = new List<ClientSiteUser>();
            var bll = new ReservationBLL();
            clientUserList = bll.GetClientUserList(searchModel);
            PagingHelp<ClientSiteUser> pageMod =
                new PagingHelp<ClientSiteUser>(20, clientUserList, clientUserList.Count());
            pageMod.PageIndex = pageIndex;
            ViewBag.clientUserList = clientUserList.Skip(num).Take(20).ToList();
            ViewBag.menuId = Request.Form["menuId"];
            ViewBag.StateList = new AA_DAL.Reservation.ReservationDal().GetAllStateList().ToList();
            return PartialView("_PartialClientUserInfo", pageMod);
        }


控制器:页面加载的方法  将内容获取 赋给viewbag 然后在查出对应的条件保存下的数据
    public ActionResult ClientUserInfo(int pageIndex = 1, Boolean back = false)
        {
            var search = TempData["SearchClentUser"] != null && back ? TempData["SearchClentUser"].ToString() : null;
            TempData["SearchClentUser"] = search;
            var searchModel = !String.IsNullOrEmpty(search)
                ? JsonConvert.DeserializeObject<ClientUserSearchViewModel>(search)
                : null;
            if (searchModel != null)
            {
                ViewBag.ClientUserId = searchModel.ClientUserId;
                ViewBag.FirstName = searchModel.FirstName;
                ViewBag.LastName = searchModel.LastName;
                ViewBag.Phone = searchModel.Phone;
                ViewBag.FromDate = searchModel.FromDate;
                ViewBag.EndDate = searchModel.EndDate;
                ViewBag.Booking = searchModel.Booking;
                ViewBag.IsBack = 1;
            }
            else
            {
                ViewBag.IsBack = 0;
                searchModel = new PA_Mod.ClientUser.ClientUserSearchViewModel();
                searchModel.FromDate = DateTime.Now.AddMonths(-3).ToString("MM/dd/yyyy");
                searchModel.Booking = "All";
            }

            string key = Request.QueryString["adminKey"];
            List<ClientSiteUser> clientUserList = new List<ClientSiteUser>();
            var bll = new ReservationBLL();
            clientUserList = bll.GetClientUserList(searchModel);
            PagingHelp<ClientSiteUser> pageMod =
                new PagingHelp<ClientSiteUser>(20, clientUserList, clientUserList.Count());
            pageMod.PageIndex = pageIndex;
            ViewBag.clientUserList = clientUserList.Skip((pageIndex - 1) * 20).Take(20).ToList();
            ViewBag.KeyString = "?adminKey=" + key;
            ViewBag.FromDate = searchModel.FromDate;
            ViewBag.menuId = Request.QueryString["menuId"];
            ViewBag.StateList = new PA_Dal.Reservation.ReservationDal().GetAllStateList().ToList();
            return View(pageMod);
        }

第二种方法  控制器对应页面  查询保存状态下的数据方法在对应的分布视图的控制器处理
 public ActionResult ContactUSList()
        {
            var search = TempData["Search"] != null ?TempData["Search"].ToString() : null;
            TempData["SearchBack"] = search;
            var searchModel = !String.IsNullOrEmpty(search)
                ? JsonConvert.DeserializeObject<ContactUsSearch>(search)
                : null;
            if (searchModel != null)
            {
               
                ViewBag.keyWord = searchModel.keyWord;
                ViewBag.type = searchModel.type;
                ViewBag.dateFrom = searchModel.dateFrom;
                ViewBag.dateTo = searchModel.dateTo;
                ViewBag.viewed = searchModel.viewed;
                ViewBag.replied = searchModel.replied;
           
            }
                    
            var Types = new ConfigurationDal().GetTypeListByCategoryName("ContactUS Type");
            ViewBag.Types = Types;
            ViewBag.key = Request["adminKey"];
            ViewBag.MenuId = Request["menuId"];
          
            return View();
        }
           
第二种写法  控制器对应分布视图  保存状态的数据在查询出来  通过是否点search来判断条件是回来的保存
还是点击之后的条件
 public ActionResult GetContactUSList(int PageIndex = 1, Boolean back = false)
        {

            ContactUsSearch models = new ContactUsSearch();
            //说明是返回页面时带有查询条件状态 并且不是点击查询按钮的时候 查询带有原来条件的数据
            if (TempData["SearchBack"] != null && Request.Form["searchJson"]==null)
            {
                var a = TempData["SearchBack"].ToString();
                models = JsonConvert.DeserializeObject<ContactUsSearch>(a);
              
            }
            else
            {
                //点击search按钮的时候 重新刷新tempdata数据
                string searchJson = Request.Form["searchJson"];
                TempData["Search"] = searchJson;
                if (!String.IsNullOrEmpty(searchJson))
                {
                    models = JsonConvert.DeserializeObject<ContactUsSearch>(searchJson);
                } 
                              
                              
            }
            ViewBag.key = Request["adminKey"];
            ViewBag.MenuId = Request["menuId"];
            List<Contact> model = new PA_Dal.ContactUs.ContactUsDal().SearchContact(models.keyWord, models.type, models.dateFrom, models.dateTo, models.viewed, models.replied);
            PagingHelp<Contact> pageMod = new PagingHelp<Contact>(20, model) { PageIndex = PageIndex };
            foreach (var item in pageMod.DataSource)
            {
                item.UserName = AA_CommonFunction.GetNewName(item.UserName, 3);
            }
            //分布视图页面数据
            return View(pageMod);
        }
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java中使用Redis来保持登录状态的常见做法是通过使用Token来实现。Token是一种用于验证用户身份和维持登录状态的令牌。 首先,用户在登录时会使用用户名和密码进行身份验证。验证成功后,可以生成一个唯一的Token,并将该Token存储在Redis中,以及与用户相关的一些其他信息,如用户名、角色等。 在用户进行其他请求时,需要验证用户的身份。此时,用户会将Token添加到请求的头部或参数中进行传递。后端服务器接收到请求后,从请求中获取Token,并将其与Redis中存储的Token进行比较。 比较的过程可以通过Redis的GET命令来实现。如果两个Token相等,则说明用户是经过身份验证的,可以继续处理后续请求。如果两个Token不相等或Redis中没有对应的Token,则说明用户的Token无效或已过期,需要重新登录。 为了保证Token的安全性,可以在生成Token时添加一定的过期时间。过期时间可以通过Redis的EXPIRE命令来设置。当过期时间到达时,Redis会自动删除该Token。同时,在用户每次操作时,可以更新Token的过期时间,以延长Token的生命周期,从而保持用户的登录状态。 此外,为了保证用户的安全性,还可以采用一些其他的安全措施,如使用HTTPS协议传输Token,对Token进行加密等。 总的来说,使用Java和Redis来保持登录状态可以通过生成和验证Token来实现。通过Token的比较和过期时间的控制,可以有效地验证用户身份,保持用户的登录状态,并保证用户的安全性。 ### 回答2: Java Redis token 保持登录状态是一种常见的实现用户身份认证与登录状态维持的方案。 首先,用户在成功登录后,服务器端会生成一个唯一的令牌(Token),将其存储到Redis中。令牌通常是一个随机字符串,具有一定的有效期。 然后,在用户每次访问需要登录状态的接口时,服务器会验证用户的令牌是否有效。具体的验证流程如下: 1. 服务器端接收到用户请求时,首先从请求头或请求参数中获取令牌。 2. 通过令牌,服务器从Redis中查询对应的用户信息,判断令牌是否有效。 3. 如果令牌有效,服务器会根据令牌对应的用户信息,进行后续的业务处理。 为了保持用户登录状态,需要对令牌进行管理和更新: 1. 令牌的有效期可以设置为较短的时间,比如30分钟。用户在访问接口时,可以通过每次请求都更新令牌的有效期。 2. 当用户注销或退出登录时,服务器会从Redis中删除对应的令牌,使其失效。 此外,为了增加令牌的安全性,可以进行以下操作: 1. 令牌应该是具有时效性的,并且每次验证通过后刷新令牌,防止被恶意使用。 2. 令牌的生成可以使用加密算法,如HMAC-SHA256等,以提高令牌的安全性。 3. 令牌在传输过程中应该使用HTTPS协议进行加密,避免被拦截窃取。 总之,Java Redis token 可以通过管理令牌的方式来实现用户登录状态的保持,有效防止身份伪造和非法访问。这种方案具有较好的安全性和扩展性,适用于大部分Web应用。 ### 回答3: Java Redis Token 保持登录状态是一种常见的实现方式,它通过将用户的登录信息存储在 Redis 中的 token 中,来实现用户的状态保持。 首先,在用户登录成功后,后端会生成一个 token,同时将 token 与用户信息关联存储在 Redis 中。这样,当用户进行后续的请求时,可以将 token 放入请求的头部或者参数中传递给后端。后端会通过解析该 token,查找 Redis 中对应的用户信息,判断用户是否已经登录。 当用户进行某个需要权限验证的操作时,后端会先验证 token 是否有效,即是否能够在 Redis 中找到对应的用户信息。如果 token 有效,则说明用户已登录,后端会进行相应的操作,并更新 token 的过期时间,延长用户的登录状态。如果 token 无效,则说明用户未登录或登录已过期,后端会进行相应的处理,比如返回登录失效的错误信息,要求用户重新登录。 当用户进行退出登录操作时,后端会将该 token 从 Redis 中删除,从而使用户的登录状态失效。 通过使用 Redis 存储用户的登录信息,可以实现多个服务之间的共享登录状态。同时,由于 Redis 的高性能和可靠性,可以提供良好的用户登录体验和高并发支持。 需要注意的是,为了保证用户的信息安全,我们需要对 token 进行加密和签名处理,避免被恶意篡改或伪造。此外,为了减轻 Redis 的负载,可以设置 token 的过期时间,并定期清理 Redis 中过期的 token。 总之,通过使用 Java Redis Token 保持登录状态,可以实现用户的持续登录和权限验证,提供良好的用户体验和系统性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值