2013-05-02 336 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

相关问题