MVC4将模型从视图传递到控制器

时间:2013-05-02 13:32:51

标签: asp.net-mvc asp.net-mvc-4

我有一个模型,其中包含有关预订出租车的数据。

在模型中是一个带有时间,价格,车辆类型的报价列表,其中显示了使用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 个答案:

答案 0 :(得分:35)

我希望这个完整的例子可以帮到你。

这是 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: $@TaxiInfo.Fare</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对象),该操作无法解决,如下所示:< / p>

    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 $@Model.Fare</h1>

视觉游览:

The Index view

The Booking view