2013-05-02 2 views
12

Ich habe eine Ansicht mit einem Modell mit Daten in Bezug auf die Buchung eines Taxis gefüllt.MVC4 Passing Modell von der Ansicht zu Controller

Im Modell ist eine Liste der Angebote mit Zeit, Preis, Fahrzeugtyp darin, die ich eine Liste der Verwendung einer foreach anzeigen. Jedes Mal, wenn das Foreah eine Schleife macht, erstellt es ein Formular und einen Submit-Button, um mich zur Aktion "BookingStage1" im Controller zu bringen. Ich habe auch ein verstecktes Feld hinzugefügt, das mit der Buchungsreferenz für das bestimmte Zitat gefüllt ist.

Also, ich hatte gehofft, dass, wenn es das Ergebnis der Aktion in meinem Controller traf, das Modell vollständig ausgefüllt zurückgegeben würde, wie es mit der Ansicht war. Aber es ist null, keine Daten darin.

Ich hatte gehofft, das bevölkerungs Modell zwischen mehreren Controllern passieren, wie der Benutzer die verschiedenen Such, Ergebnisse und Buchungsmasken ...

Ist es möglich, die voll bestückte Modell aus der Sicht zurück zu passieren schreitet durch in den nächsten Controller?

Dank

In meiner Suchergebnisseite habe ich die folgende Form:

using (Html.BeginForm("BookingPage1", "SearchResults", FormMethod.Post)) 

Ich habe auch ein verstecktes Feld in der Form, wie unten:

<input type="hidden" id="BookingID" name="ChosenBookingID" value='@item.QuotationID' /> 

, die Beiträge meiner Controller, der wie folgt aussieht:

[HttpPost] 
    public ActionResult BookingPage1(string ChosenBookingID, Route theRoute) 
    { 
     //this does noting yet. 
     return View(); 
    } 

Aber theRoute ist immer leer :(

+1

hallo können Sie Ihren Controller und View-Code übergeben? –

+0

Dies sollte nur möglich sein, abhängig von dem Modell, das Ihre 'BookingStage1'-Aktion erfordert, und von der Art, wie Sie Ihre Modelle in Ihrer' BookingStage0'-Ansicht drucken. Bitte zeigen Sie diese. – CodeCaster

+0

"Jedes Mal, wenn das Foreah eine Schleife erstellt, wird ein Formular und eine Schaltfläche zum Senden erstellt." Wenn Sie jedes Mal ein Formular erstellen, wird das Modell nicht vollständig mit den Listen der Zitate gefüllt. Sie müssen ein Formular mit allen Eingaben erstellen und Schaltflächen innerhalb genau dieses Formulars senden. – Rohrbs

Antwort

31

Ich hoffe, dieses vollständige Beispiel wird Ihnen helfen.

Dies ist die TaxiInfo Klasse, die Informationen über eine Fahrt mit dem Taxi hält:

namespace Taxi.Models 
{ 
    public class TaxiInfo 
    { 
     public String Driver { get; set; } 
     public Double Fare { get; set; } 
     public Double Distance { get; set; } 
     public String StartLocation { get; set; } 
     public String EndLocation { get; set; } 
    } 
} 

Wir haben auch ein Komfort-Modell haben die Liste von TaxiInfo (n) hält ein:

namespace Taxi.Models 
{ 
    public class TaxiInfoSet 
    { 
     public List<TaxiInfo> TaxiInfoList { get; set; } 

     public TaxiInfoSet(params TaxiInfo[] TaxiInfos) 
     { 
      TaxiInfoList = new List<TaxiInfo>(); 

      foreach(var TaxiInfo in TaxiInfos) 
      { 
       TaxiInfoList.Add(TaxiInfo); 
      } 
     } 
    } 
} 

Jetzt im Heimcontroller haben wir die Standard Index Aktion, die für dieses Beispiel macht zwei Taxifahrer und fügt sie in die Liste in einem TaxiInfo enthalten:

public ActionResult Index() 
{ 
    var taxi1 = new TaxiInfo() { Fare = 20.2, Distance = 15, Driver = "Billy", StartLocation = "Perth", EndLocation = "Brisbane" }; 
    var taxi2 = new TaxiInfo() { Fare = 2339.2, Distance = 1500, Driver = "Smith", StartLocation = "Perth", EndLocation = "America" }; 

    return View(new TaxiInfoSet(taxi1,taxi2)); 
} 

Der Code für die Ansicht wie folgt:

@model Taxi.Models.TaxiInfoSet 
@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

@foreach(var TaxiInfo in Model.TaxiInfoList){ 
    <form> 
     <h1>Cost: [email protected]</h1> 
     <h2>Distance: @(TaxiInfo.Distance) km</h2> 
     <p> 
      Our diver, @TaxiInfo.Driver will take you from @TaxiInfo.StartLocation to @TaxiInfo.EndLocation 
     </p> 
     @Html.ActionLink("Home","Booking",TaxiInfo) 
    </form> 
} 

Die Action ist für die Wieder verantwortlich -directing zum Buchungsvorgang des Heim Controller (und in dem entsprechenden TaxiInfo Objekt übergibt), die defiend ist wie folgt:

public ActionResult Booking(TaxiInfo Taxi) 
    { 
     return View(Taxi); 
    } 

Dies gibt eine folgende Ansicht:

@model Taxi.Models.TaxiInfo 

@{ 
    ViewBag.Title = "Booking"; 
} 

<h2>Booking For</h2> 
<h1>@Model.Driver, going from @Model.StartLocation to @Model.EndLocation (a total of @Model.Distance km) for [email protected]</h1> 

Eine visuelle Tour:

The Index view

The Booking view

+0

FANTASTISCH! - Komm mit mir arbeiten !! lol –

+1

Was ist die Bezahlung? ;) haha. Froh, dass ich helfen könnte :) – HennyH

+0

der Lohn ist Scheiße. Geldautomat. versuchen, £ 35m Anfragen pro Jahr in echtes Geld zu verwandeln. ich bin nah. Denk darüber nach. :) Willst du einen Blick auf tfs werfen? –

Verwandte Themen