2013-05-02 28 views
12

タクシーの予約に関するデータが入力されたモデルのビューがあります。MVC4ビューからコントローラへモデルを渡す

モデルには、foreachを使用したリストを表示する時間、価格、車種の見積もりの​​リストがあります。 foreahがループするたびにフォームとSubmitボタンが作成され、コントローラの "BookingStage1"アクションに移動します。私はまた、特定の見積もりの​​ために予約参照が入っている隠しフィールドを追加しました。

私はコントローラのアクション結果をヒットしたときに、そのモデルがビューのように完全に読み込まれることを期待していました。しかし、それはヌルで、データはまったくありません。

私は、ユーザーが様々な検索結果と予約画面を進むにつれてコントローラの数との間に人口のモデルを渡すために期待していた...

は、ビューから戻ってフル装備モデルを渡すことが可能です次のコントローラに入れますか?

おかげで私の検索結果ページで

は、私は次のような形式があります

私への投稿
<input type="hidden" id="BookingID" name="ChosenBookingID" value='@item.QuotationID' /> 

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

を私はまた、以下のようにフォームで隠しフィールドを持っていますコントローラは次のようになります:

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

しかし、ルートは常に空です:(

+1

ハイテクは、あなたのコントローラとビューのコードを渡すことができますか? –

+0

これはちょうどあなたの 'ReservationsStage1'アクションが必要とするモデルとあなたのモデルを' BookingStage0'ビューに印刷する方法に応じて、可能であるべきです。これらを示してください。 – CodeCaster

+0

"foreahがループするたびにフォームと送信ボタンが作成されます"フォームを毎回作成すると、モデルには引用のリストが完全には埋め込まれません。 1つのフォームを作成して、すべての入力と送信ボタンをそのフォーム内に作成する必要があります。 – Rohrbs

答えて

31

私はこの完全な例があなたに役立つことを願っています。

これは、タクシーの情報を保持しているTaxiInfoクラスです:

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); 
      } 
     } 
    } 
} 

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; } 
    } 
} 

我々はまた、TaxiInfo(S)一覧を保持している便利なモデルを持っています

ホームコントローラでは、デフォルトののインデックスアクションがあります。この例では2人のタクシー運転手を作り、TaxiInfoに含まれているリストに追加します:

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)); 
} 

次のようにビューのコードは次のとおりです。

@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> 
} 

ActionLinkのが再責任がありますホームコントローラの予約アクションに-directing(及び適切なTaxiInfoオブジェクトに渡す)、以下のようにdefiendれる:

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

これは、次のビューを返します。

@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> 

のビジュアルツアー:

The Index view

The Booking view

+0

AWESOME! - 私と一緒に仕事に来てください!笑 –

+1

給料は何ですか? ;)ハハ。私は助けることができる喜んで – HennyH

+0

給料はたわごとです。 atm。 1年に3500万ポンドのお問い合わせを本物のお金に変えようとしています。私は近くにいます。それについて考える。 :) tfsを見てみたいですか? –

関連する問題