2013-05-02 134 views
12

我有一個模型視圖,其中包含與預訂出租車有關的數據。MVC4將模型從視圖傳遞到控制器

在該模型中是一個列表,其中包含時間,價格,車輛類型,我使用foreach顯示列表。每次foreah循環時,它都會生成一個表單和一個提交按鈕,以使我能夠進入控制器中的「BookingStage1」操作。我還添加了一個隱藏字段,其中包含特定報價的預訂參數。

所以,我希望當它碰到我的控制器中的動作結果時,模型將被返回完全填充,就像它與視圖一樣。但它是空的,沒有任何數據。

我希望爲用戶前進通過各種搜索,結果和預約屏幕來傳遞多個控制器之間的人口模型...

是否有可能從視圖通過完全填充的模型回進入下一個控制器?

感謝

在我的搜索結果頁面,我有以下形式:

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

我也有如下的形式隱藏字段:

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

這帖子我看起來像這樣的控制器:

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

但路由總是空的:(

+1

嗨,你可以通過你的控制器和視圖代碼? – 2013-05-02 13:34:49

+0

這應該是可能的,取決於您的'BookingStage1'行動需要的模型以及將模型打印到'BookingStage0'視圖的方式。請顯示這些。 – CodeCaster 2013-05-02 13:36:36

+0

「每次foreah循環都會生成一個表單和一個提交按鈕」如果您每次都創建一個表單,那麼該模型將不會被引用列表完全填充。您必須使用所有輸入構建一個表單,並在該表單中提交按鈕。 – Rohrbs 2013-05-02 13:40:17

回答

31

我希望這個完整的例子將幫助你。

這是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)列表一個方便的模式:

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

現在在家裏的控制器裏我們有默認的索引這個動作是在這個例子中提出了兩個出租車司機,並將它們添加到包含在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的負責重 - 導向主頁控制器(並傳遞相應的TaxiInfo對象)的預訂動作,該動作如下定義:

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

真棒! - 來和我一起工作吧!大聲笑 – 2013-05-02 15:53:24

+1

什麼是薪水? ;) 哈哈。很高興我可以幫助:) – HennyH 2013-05-02 15:54:58

+0

工資是狗屎。大氣壓。試圖將一年3500萬英鎊的查詢轉化爲現金。快到了。考慮一下。 :)想看看tfs? – 2013-05-02 17:51:38

相關問題