2016-03-18 13 views
1

私のMVCアプリケーションのモデルはsearchです。今MVCモデルのVaryByParam

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データによって選択されたのparamsを通過し、私のGETリクエストは以下の通りです:

[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"を設定してもよいし、複数の場合は​​3210の値を区切って設定することもできます。しかし、私はどのように複雑なmodelのパラメータをキャッシュしますか?

答えて

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をありがとう.. :) –

関連する問題