Comment faire pour rediriger une requête POST à l'url maintien des valeurs de modèle MVC

J'ai un assez standard de tri/filtre/page formulaire de recherche, mais ont besoin de contrôler le format de l'url. Le tri/filtre/page paramètres devraient tous faire partie de l'url de sorte que, par exemple, l'adresse peut être envoyé par courriel à quelqu'un.

Quand un autre paramètre de filtre est ajouté, une requête POST est fait. Mon contrôleur méthode ressemble à ceci:

[HttpPost]
public ActionResult Search(string filterField,
                           Operator filterOperator, 
                           string filterValue, 
                           PeopleGroupSearchModel model);

La PeopleGroupSearchModel est renseignée à partir des paramètres de chaîne de requête. Le filter* paramètres sont à venir à partir de la publication des valeurs d'un formulaire.

Je voudrais analyser la condition des valeurs de filtre, qui seront ensuite ajouter un filtre pour une collection dans le modèle appelé Filters. Ensuite, prendre la mise à jour du modèle et de le convertir à l'url appropriée et que la réponse à l'utilisateur.

Ainsi, par exemple, s'ils sont sur cette page:

PeopleGroup/Search?page=4&sort=Country

... et après:

  • filterField = PeopleGroupName
  • filterOperator = Égal à
  • filterValue = Zoulou

... une fois que tout le traitement est fait, l'adresse dans leur navigateur doit être quelque chose comme:

PeopleGroup/Search?page=4&sort=Country&PeopleGroupName=Zulu&PeopleGroupName_op=Equals

Donc plus ou moins ce que je suis en train de faire:

[HttpGet]
public ActionResult Search(PeopleGroupSearchModel model)
{
    PeopleGroupData.Search(model);
    ViewData.Model = model;
    return View();
}

[HttpPost]
public ActionResult Search(string filterField,
                           Operator filterOperator,
                           string filterValue,
                           PeopleGroupSearchModel model)
{
    PeopleGroupFilter filter = ParseFilter(filterField, 
                                           filterOperator, 
                                           filterValue);
    model.Filters.Add(filter);
    return RedirectToAction("Search", ???);
}

Je suis très nouveau pour MVC, donc si je vais sur ce tout à fait dans le mauvais sens, s'il vous plaît laissez-moi savoir!

OriginalL'auteur Dave Mateer | 2011-07-25