public ActionResult Index() { AListingSearchModel listingSearchModel = new ListingSearchViewModel(); ViewBag.searchViewModel = listingSearchModel; return(View(listingSearchModel)); }
//public async Task<IActionResult> List([FromBody]PaginationViewModel model) public async Task <IActionResult> List([FromQuery] string title, [FromQuery] int?page, [FromQuery] int?cityId) { ListingSearchViewModel model = new ListingSearchViewModel(); model.Page = page; model.Title = title; model.CityId = cityId; int p = model.Page != null?model.Page.GetValueOrDefault() : 1; return(Json(await this.service.GetListingPage(ClaimsHelper.GetUserId(this.User), model))); }
private IQueryable <Listing> GetListingsQuery(string userId, ListingSearchViewModel search) { IQueryable <Listing> query = this.db.Listings; var role = this.identityHelper.GetRoleByUserId(userId); if (userId != null && role.Result.Name != "Student") { query = query.WhereOwnerIs(userId); } if (search.Title != null) { query = query.Where(l => l.Title.Contains(search.Title)); } if (search.CityId != null) { int cityId = search.CityId.GetValueOrDefault(); query = query.Where(l => l.CityId == cityId); } return(query); }
public async Task <List <Listing> > GetListings(string userId, ListingSearchViewModel search) { return(await this.GetListingsQuery(userId, search).ToListAsync()); }
public async Task <CompanyListingListPageViewModel> GetListingPage(string userId, ListingSearchViewModel search) { CompanyListingListPageViewModel model = new CompanyListingListPageViewModel(); var listings = await this.GetListingsQuery(userId, search) .Paginate(10, search.Page != null ? search.Page.GetValueOrDefault() : 1) .ToListAsync(); model.Listings = listings.Select(l => new ListingViewModel() { Id = l.Id, Title = l.Title, }).ToList(); model.Page = search.Page.GetValueOrDefault(); model.Total = await this.GetListingsQuery(userId, search).CountAsync(); return(model); }
public ActionResult MainSearch() { var model = new ListingSearchViewModel(); return(PartialView("~/Views/Shared/Widgets/Search/_MainSearch.cshtml", model)); }
//public ActionResult search(int? page,string order, string text="",int id=0) public ActionResult search(ListingSearchViewModel model) { string priceOrder = "price"; string townOrder = "town"; // model.controller = "listing"; // model.action = "search"; if (ModelState.IsValid) { //compare max and min price if (model.from > model.to) { ModelState.AddModelError("", "Max price cannot be less than Min price."); } Category searchedCategory; DateTime now = DateTime.Now; var predicate = PredicateBuilder.False <Listing>(); var listingsQ = from l in db.Listings.Include("Category").Include("images") where l.Status == "live" && l.Expires > now select l; //using LinqKit predicate dynamic linq to enable 'OR' logical 'Where' chaining if (!String.IsNullOrEmpty(model.text)) { predicate = predicate.Or(c => c.Title.ToLower().Contains(model.text.ToLower()) || c.Description.ToLower().Contains(model.text.ToLower())); } if (model.from > 0) { predicate = predicate.And(c => c.Price >= model.from); } if (model.to > 0) { predicate = predicate.And(c => c.Price <= model.to); } if (!String.IsNullOrEmpty(model.location)) { predicate = predicate.And(c => c.Town.ToLower().Contains(model.location.ToLower())); } //find listigns from this and child categories if (model.Category != null && model.Category.CategoryId > 0) { List <Category> categoryTree = categoryHelper.allSubCategories(model.Category.CategoryId); if (categoryTree.Count > 0) { SortedDictionary <string, int> crumbs = new SortedDictionary <string, int>(); foreach (var leafNodeCategory in categoryTree) { crumbs.Add(leafNodeCategory.Title, leafNodeCategory.CategoryId); } int[] ids = crumbs.Values.ToArray(); //string[] titles = crumbs.Keys.ToArray(); predicate = predicate.And(c => ids.Contains(c.CategoryId)); searchedCategory = db.Categories.Find(model.cat); //predicate = predicate.Or(c => c.Category.Title.ToLower().Contains(model.text.ToLower()) || c.Category.Controller.ToLower().Contains(model.text.ToLower()) || c.Category.Tags.ToLower().Contains(model.text.ToLower())); } } //also search for categories like this if id not specified if (model.cat <= 0 || model.cat == null) { predicate = predicate.Or(c => c.Category.Title.ToLower().Contains(model.text.ToLower()) || c.Category.Controller.ToLower().Contains(model.text.ToLower()) || c.Category.Tags.ToLower().Contains(model.text.ToLower())); } listingsQ = listingsQ.AsExpandable().Where(predicate); //ordering listingsQ = listingsQ.OrderByDescending(c => c.Updated); if (!String.IsNullOrEmpty(model.order)) { if (model.order == "price") { listingsQ = listingsQ.OrderBy(c => c.Price); priceOrder = "price_desc"; } if (model.order == "price_desc") { listingsQ = listingsQ.OrderByDescending(l => l.Price); priceOrder = "price"; } if (model.order == "town") { townOrder = "town_desc"; listingsQ = listingsQ.OrderBy(l => l.Town); } if (model.order == "town_desc") { townOrder = "town"; listingsQ = listingsQ.OrderByDescending(l => l.Town); } } else { listingsQ = listingsQ.OrderByDescending(c => c.Updated); } ViewBag.searchViewModel = model; ViewBag.priceOrder = priceOrder; ViewBag.townOrder = townOrder; ViewBag.sortOrder = model.order; ViewBag.page = model.page; return(View(listingsQ.ToPagedList(1, pagesize))); } ViewBag.priceOrder = priceOrder; ViewBag.townOrder = townOrder; ViewBag.sortOrder = model.order; ViewBag.page = 1; ViewBag.searchViewModel = model; List <Listing> type = new List <Listing>(); return(View(type.ToPagedList(1, pagesize))); }