2010-11-22 3 views
0

J'ai un contrôleur appelé Person et il a une méthode post appelée NameSearch.Réécriture de l'URL d'une méthode d'action Controllers

Cette méthode renvoie RedirectToAction ("Index") ou View ("SearchResults") ou View ("Détails"). L'URL que je reçois pour les 3 possibilités est http://mysite.com/Person/NameSearch. Comment devrais-je modifier cela pour réécrire les URL à http://mysite.com/Person/Index pour RedirectToAction ("Index"), http://mysite.com/Person/SearchResults pour View ("SearchResults"), et http://mysite.com/Person/Details pour View ("Détails").

Merci à l'avance

Répondre

1

Je suppose que votre fonction NameSearch évalue le résultat d'une requête et renvoie ces résultats en fonction de:

  1. Est-ce la requête valide? Sinon, retournez à l'index.
  2. Y at-il 0 ou> 1 personnes dans le résultat? Si oui, envoyer aux résultats de la recherche
  3. S'il y a exactement 1 personne dans le résultat, envoyer à Détails.

Ainsi, plus de moins votre contrôleur ressemblerait à ceci:

public class PersonController 
{ 
    public ActionResult NameSearch(string name) 
    { 
    // Manage query? 
    if (string.IsNullOrEmpty(name)) 
     return RedirectToAction("Index"); 

    var result = GetResult(name); 
    var person = result.SingleOrDefault(); 
    if (person == null) 
     return RedirectToAction("SearchResults", new { name }); 

    return RedirectToAction("Details", new { id = person.Id }); 
    } 

    public ActionResult SearchResults(string name) 
    { 
    var model = // Create model... 

    return View(model); 
    } 

    public ActionResult Details(int id) 
    { 
    var model= // Create model... 

    return View(model); 
    } 
} 

Donc, vous auriez probablement besoin de définir des itinéraires tels que:

routes.MapRoute(
    "SearchResults", 
    "Person/SearchResults/{name}", 
    new { controller = "Person", action = "SearchResults" }); 

routes.MapRoute(
    "Details", 
    "Person/Details/{id}", 
    new { controller = "Person", action = "Details" }); 

Le résultat de l'action Index seront traitées par l'itinéraire {controller}/{action}/{id} par défaut.

Qui vous pousse dans la bonne direction?

+0

Merci matthew! C'est exactement la direction que je cherchais! – zSynopsis

+0

Nevermind. J'ai découvert ce que je faisais mal. – zSynopsis

+0

Pouvez-vous mettre à jour la question avec un extrait de ce à quoi ressemble votre contrôleur actuel, ainsi que vos itinéraires (et l'ordre dans lequel ils sont enregistrés) –