2010-01-02 8 views
6

Ich habe eine create Aktion in meinem Controller für die HttpPost. Innerhalb dieser Aktion füge ich den Datensatz in die db ein und gebe dann eine Ansicht zurück, die einen anderen Aktionsnamen angibt, weil ich den Benutzer an einen anderen Ort bringen möchte, z. B. in die Detailansicht des gerade erstellten Datensatzes, und ich gebe den aktuelles Modell, so dass ich die gerade eingegebenen Daten nicht erneut laden muss. Leider zeigt die URL in der Adressleiste immer noch die ursprüngliche Erstellungsaktion an.asp mvc: Angabe eines Ansichtsnamens ändert nicht die URL

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    //Go to details view, pass the current model 
    //instead of re-loading from database 
    return View("Details", model); 
} 

Wie erhalte ich die URL "http://myapp/MyController/Details/1" zu zeigen, statt "http://myapp/MyController/Create/1"? Ist es möglich, oder muss ich eine Umleitung machen? Ich hoffe, ich kann die Umleitung vermeiden ...

Antwort

4

Sie müssen eine Umleitung vornehmen, um die URL im Browser zu ändern.

Der Ansichtsname, den Sie übergeben, teilt MVC einfach mit, welche Ansicht gerendert werden soll. Es ist ein Implementierungsdetail Ihrer Anwendung.

Der Code würde wie etwas aussehen:

[HttpPost] 
public ActionResult Create(MyModel model) 
{ 
    //Insert record 
    ... 
    return RedirectToAction("Details", new { id = model.ID }); 
} 

Einer der Gründe, warum Sie wollen hier eine Umleitung zu tun ist, so dass der Benutzer auf die Schaltfläche Aktualisieren im Browser treffen kann und nicht, dass die lästigen bekommen " Möchten Sie die Daten erneut posten "Dialog.

Dieses Verhalten wird oft "Post-Redirect-Get" oder kurz "PRG" genannt. Sehen Sie den Wikipedia-Artikel für mehr Info über PRG: Post/Redirect/Get