2010-11-22 8 views
0

Ich habe einen Controller namens Person und es hat eine Post-Methode namens NameSearch.Umschreiben der URL für eine Controller-Aktionsmethode

Diese Methode gibt RedirectToAction ("Index") oder View ("SearchResults") oder View ("Details") zurück. Die URL, die ich für alle 3 Möglichkeiten bekomme, sind http://mysite.com/Person/NameSearch. Wie würde ich das ändern, um die URLs für RedirectToAction ("Index"), http://mysite.com/Person/SearchResults für View ("SearchResults") und http://mysite.com/Person/Details für View ("Details") in http://mysite.com/Person/Index umzuschreiben.

Vielen Dank im Voraus

Antwort

1

Ich bin Ihre NameSearch Funktion unter der Annahme, wertet das Ergebnis einer Abfrage aus und gibt diese Ergebnisse basieren auf:

  1. Ist die Abfrage gültig? Wenn nicht, kehren Sie zum Index zurück.
  2. Gibt es 0 oder> 1 Personen im Ergebnis, wenn ja, an Suchergebnis senden
  3. Wenn es genau 1 Person im Ergebnis gibt, senden Sie an Details.

also mehr oder weniger dem Controller würde wie folgt aussehen:

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

Also, würden Sie wahrscheinlich Routen so definieren müssen, dass:

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

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

Die Index Aktion Ergebnis wird behandelt standardmäßig {controller}/{action}/{id} Route.

Das drücken Sie in die richtige Richtung?

+0

Danke matthew! Das ist genau die Richtung, nach der ich gesucht habe! – zSynopsis

+0

Vergiss es. Ich habe herausgefunden, was ich falsch gemacht habe. – zSynopsis

+0

Können Sie die Frage mit einem Auszug aktualisieren, wie Ihr Controller tatsächlich aussieht, und auch Ihre Routen (und die Reihenfolge, in der sie registriert sind) –