项目中经常会遇见在列表页面 输入一些条件之后查询后 进入详情页在返回之后希望查询的条件保留 这样不需要再去输入条件
如何做到查询状态保留?
核心思想 就是 查询之后的那些条件的值放入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);
}