1

У меня есть search модель для моего приложения MVC.VaryByParam для 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; } 
} 

Теперь, когда пользователь ищет для любой записи, он будет передавать выбранную Params через 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 param здесь?

ответ

2

В соответствии со значением 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" 
+0

Спасибо @Alex .. :) –