VaryByParam для модели MVC
У меня ниже search
модель для моего MVC
приложение.
public class SearchFilters
{
public SearchFilters()
{
MinPrice = "10000";
MaxPrice = "8000000";
}
public IEnumerable<SelectListItem> Categories { get; set; }
public string[] CategoriesId { get; set; }
public IEnumerable<SelectListItem> Locations { get; set; }
public string[] LocationID { get; set; }
public IEnumerable<SelectListItem> Status { get; set; }
public string[] StatusID { get; set; }
public string MinPrice { get; set; }
public string MaxPrice { get; set; }
}
Теперь, когда пользователь ищет любую запись, он будет передавать выбранные параметры через model
данные и мой запрос на получение, как показано ниже:
[HttpGet]
public ActionResult Search([Bind(Prefix = "searchModel")]SearchFilters smodel)
{
CategoryViewModel model = new CategoryViewModel();
model = _prepareModel.PrepareCategoryModel("Search", smodel);
if (model.projects.Count == 0)
{
return Json(new { message = "Sorry! No result matching your search", count = model.projects.Count }, JsonRequestBehavior.AllowGet);
}
return PartialView("_CategoryView", model);
}
Если переданный параметр был string
или же int
Я мог бы установить VaryByParam = "param"
или, если несколько, это будет установлено с ';'
разделенные значения. Но как бы я кешировал комплекс model
парам здесь?
1 ответ
Согласно MSDN значение VaryByParam должно быть
список строк, разделенных точкой с запятой, которые соответствуют значениям строки запроса для метода GET или значениям параметра для метода POST.
Поэтому для сложной модели необходимо указать все ее свойства, разделенные точкой с запятой. Вы также должны принять во внимание префикс привязки, который у вас есть. Поскольку ваш запрос HttpGet, скорее всего, выглядит так:
http://../someUrl?searchModel.MinPrice=1&searchModel.MaxPrice=5&searchModel.CategoriesId=10&searchModel.LocationID=3&searchModel.StatusID=8
Значение VaryByParam должно быть:
VaryByParam="searchModel.MinPrice;searchModel.MaxPrice; searchModel.CategoriesId;searchModel.LocationID;searchModel.StatusID"