2012-03-26 14 views
1

Ich bin Anfänger in MVC3, und ich möchte einen Wert von einem anderen Controller-Methode erhalten. Hier sind die beiden Methoden:Wie übergibt man einen Wert von einer Controller-Methode an einen anderen?

[HttpPost] 
    public ActionResult Create(TennisClub tennisclub) 
    { 
     if (ModelState.IsValid) 
     { 
      db.TennisClubs.Add(tennisclub); 
      db.SaveChanges(); 
      return RedirectToAction("AssignManager"); 
     } 

     return View(tennisclub); 
    } 

    [HttpPost] 
    public ActionResult AssignManager(Manager manager) 
    { 

    } 

Also, wenn ich einen neuen Tennisclub zu schaffen, sofort würde Ich mag einen Manager, um es zu vergeben ... Dafür brauche ich den Primärschlüssel „ID“.

Also meine Frage ist: Wie bekomme ich diese ID in meiner "AssignManager" -Methode? Vielen Dank im Voraus

+0

Warum nicht Sie den Manager direkt dort zuweisen, wenn Sie den Tennisclub hinzufügen? –

+0

Weil ich es erstellen muss, bevor Sie es dem Tennisclub zuweisen, Sorry, ich vergesse dieses Detail ... – Razor

+0

Francesco, einfach per Referenz zuweisen, der Datenkontext wird das Auto für dich nehmen. – KingCronus

Antwort

3

Sie können nicht umleiten zu einer Aktion mit dem [HttpPost] Attribut geschmückt. So funktioniert eine Weiterleitung nicht. Eine Umleitung bedeutet, dass Sie einen 301 HTTP-Statuscode mit dem neuen Location-Header an den Client senden und der Client eine GET-Anforderung an diesen neuen Standort sendet.

Also, wenn Sie das [HttpPost] Attribut aus AssignManager Aktion entfernen können Sie die ID als Parameter übergeben:

return RedirectToAction("AssignManager", new { id = "123" }); 

und dann:

[HttpPost] 
public ActionResult AssignManager(int id) 
{ 

} 
+0

Danke, endlich funktioniert es! – Razor

1
return RedirectToAction("AssignManager", new { id = tennisclub.Id }); 

Auch müssen Sie die [HttpPost] entfernen Attribut von Ihrer Aktion

public ActionResult AssignManager(int id) { 
    //... 
} 
+0

Vielen Dank für Ihre Antwort + 1 – Razor

1

Grundsätzlich müssen Sie eine GET AssignManager Methode haben, auch, was einen Parameter zu sagen haben würde es die TennisClub der Manager vergeben werden soll:

[HttpGet] 
public ActionResult AssignManager(int tennisClubId) 
{ 
    // here, you will want to return AssignManager view 
} 

Und wenn zu AssignManager von Create Umleitung können Sie festlegen, die ID von TennisClub:

return RedirectToAction("AssignManager", new { tennisClubId = tennisclub.Id }); 
+0

Vielen Dank für Ihre Antwort + 1 – Razor

Verwandte Themen