2016-07-06 21 views
0

Ich möchte auf eine vorherige Seite umleiten, nachdem ich einige Daten in der Datenbank übermitteln. Ich verwende eine TempData, um ID auf der aktuellen Seite abzurufen, dann gehe ich auf die Seite mit dem Formular Ich möchte (which have an ID) senden, aber nachdem die POST Methode gefeuert TempData wird von current page ID übergangen, die die Seite mit dem Formular ist und Ich möchte ReturnRedirect auf die erste Seite mit seiner ID.TempData wird übergangen, wenn ich versuche, ReturnRedirect

Hier ist der Code:

-Controller mit GET-Methode, wo ich die ID abzurufen:

var currentID = Url.RequestContext.RouteData.Values["id"];   
TempData["currentId"] = currentID; 

-Controller mit POST-Methode, wo ich versuchen umzuleiten:

if (ModelState.IsValid) 
{ 
    // Editing records in database 
    .... 
    return RedirectToAction("Details", "Jobs", 
     new { controller = "JobsController", action = "Details", id = TempData["currentId"] }); 
} 
ModelState.AddModelError("", "Something failed"); 
return View(); 

ich dies mit Ansatz, weil es funktioniert, wenn die aktuelle Aktion mit einer POST-Methode keine ID hat.

Vielen Dank für Anregungen.

EDIT:

Ich habe ein Detail von Jobs:

// GET: Jobs/Details/5 
    public ActionResult Details(Guid id) 
    { 
     var currentID = Url.RequestContext.RouteData.Values["id"];   
     TempData["currentId"] = currentID; 

     var currentUserTemp = LoggedUserId; 
     TempData["userID"] = currentUserTemp; 

     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     Job job = db.Jobs.Find(id); 
     if (job == null) 
     { 
      return HttpNotFound(); 
     } 

     return View(job); 
    } 

Aber auf dieser Seite mag ich einen Link zu einer Seite, wo ich aktuelle Benutzerdaten bearbeiten.

Details Seite Code:

@Html.ActionLink("Edit Company Details", "Edit", "UserAdmin", new { id = TempData["userID"] }, null) 

Jetzt bin ich auf Seite Benutzer bearbeiten, ich das Formular bearbeiten und speichern, Schaltfläche verwenden (die POST-Methode auslöst) Ich habe die anderen TempData Variable ReturnRedirect auf dem Grundstück Detail verwenden möchten Seite, aber da beide Seiten IDs haben, wird TempData mit der letzten ID von der URL überschrieben, die die ID der Benutzer-ID ist.

+0

wo hast du 'var currentID = Url.RequestContext.RouteData.Values ​​[" id "] geschrieben; TempData ["currentId"] = currentID; 'code –

+1

können Sie Ihre Frage ein wenig klarer stellen. Fügen Sie bei Bedarf einen Code hinzu –

+1

@MyName - fügen Sie bitte Ihre Aktionsmethode hinzu (get und post beide). Wenn Sie denselben Namen für die get und post-Aktionsmethode verwenden können, müssen Sie nicht einfach umleiten(). –

Antwort

1

Vergessen Sie nicht, dass TempData nur während der Zeit einer HTTP-Anfrage existiert. Vielleicht ist es ein Hinweis auf Ihr Problem (ich kann nicht alle Interaktionen zwischen Controllern und Ansichten in Ihrem Code finden, so kann ich nicht sicher sein).

+0

Nun, Ihre Antwort war ein sehr guter Hinweis, und ich begann nach Sitzungen zu suchen, und es hat es getan. Ich habe ziemlich genau herausgefunden, dass meine TempData weggespült wird, aber ich habe versucht, sie dauerhaft zu machen. Vielen Dank – Eduard