2017-04-25 2 views
0

Eine Anfängerfrage - Ich habe einen HomeController, HomeModel und HomeView. Wenn der Benutzer auf die http://page/Home Seite kommt, wird Index Methode ausgeführt und er kann einige Steuerelemente ausfüllen. Nachdem er auf eine Schaltfläche (Postback) geklickt hat, wird die Aktion Prozess ausgeführt und im Fehlerfall ruft die Anwendung die Methode ModelState.AddModelError auf. Dann wird die Aktion Index erneut aufgerufen und ich kann den Fehler auf der Seite anzeigen.So erhalten Sie die URL beim Zurückgeben neuer Ansicht

Das funktioniert OK, aber das Problem ist, dass nach dem Postback die neue URL http://page/Home/Index statt http://page/Home ist. Irgendeine Idee, wie man das verhindert?

PS - versuchte ich this Lösung, aber dann wird die neue URL war so etwas wie http://page/Home?...long string of serialized ModelState data...

Mein Controller:

[HttpGet] 
public ActionResult Index(MyModel model) 
{ 
    return View(model); 
} 

[HttpPost] 
public ActionResult Process(MyModel model) 
{ 
    if (...error...) 
    { 
     model.SetErrorState(); 
     ModelState.AddModelError("ProcessError", "error message"); 
     return View("Index", model); 
    } 
    else 
    { 
     // do something... 
     model.SetSuccessState(); 
     return View("Index", model); 
    } 
} 

Antwort

2

Das Problem ist, Sie für die HttpPost Aktion zu einer neuen URL schieben. Wenn Sie dies in eine HttpPost Version Ihrer Home Aktion ändern, können Sie problemlos zur Seite zurückkehren, ohne dass sich die URL bei einem Fehler ändert.

z.B.

[HttpGet] 
public ActionResult Index(ImportData model) 
{ 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(MyModel model, FormCollection data) 
{ 
    if (...error...) 
    { 
     model.SetErrorState(); 
     ModelState.AddModelError("ProcessError", "error message"); 
     return View(model); 
    } 
    else 
    { 
     // do something... 
     model.SetSuccessState(); 
     return View(model); 
    } 
} 
+0

Ich habe bei meiner Frage einen Fehler gemacht - beide Methoden erwarten einen Parameter vom selben Typ 'MyModel'. Wenn ich das korrigiere und Ihre Lösung anwende, dann beschwert sich der Compiler: "Type HomeController definiert bereits ein Member namens Index mit denselben Parametertypen". – sventevit

+0

aktualisiert @sventevit :) fügen Sie einfach die (unbenutzte) 'FormCollection' var hinzu, um zu unterscheiden. – scgough

+0

perfekt, danke :) – sventevit

Verwandte Themen