2016-03-18 11 views
1

Ich habe unter search Modell für meine MVC Anwendung.VaryByParam für MVC Modell

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; } 
} 

Jetzt, wenn der Benutzer sucht nach einem beliebigen Datensatz, es wird die ausgewählten params durch model Daten und meine Erhaltungs-Anforderung ist, wie unten passieren:

[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); 
} 

Wenn der übergebene Parameter ein string oder int war, Ich könnte VaryByParam = "param" gesetzt haben, oder wenn es mehrfach wäre, würde es mit ';' getrennten Werten eingestellt werden. Aber wie würde ich den komplexen model param hier zwischenspeichern?

Antwort

2

Nach dem MSDN VaryByParam Wert sollte

ein Semikolon getrennte Liste von Strings, die Werten für die GET-Methode zur Abfrage-String entsprechen, oder Parameterwerte für die POST-Methode.

Also für komplexes Modell müssen Sie alle seine Eigenschaften getrennt durch Semikolon angeben. Sie müssen auch das bindende Präfix berücksichtigen, das Sie haben. Da Ihr HttpGet Anfrage höchstwahrscheinlich wie folgt aussehen:

http://../someUrl?searchModel.MinPrice=1&searchModel.MaxPrice=5&searchModel.CategoriesId=10&searchModel.LocationID=3&searchModel.StatusID=8 

Das sollte VaryByParam Wert sein:

VaryByParam="searchModel.MinPrice;searchModel.MaxPrice; searchModel.CategoriesId;searchModel.LocationID;searchModel.StatusID" 
+0

Thank you @ Alex .. :) –