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"
Другие вопросы по тегам