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

Tre*_*iel 14 asp.net-mvc asp.net-mvc-4

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

在模型中是一个带有时间,价格,车辆类型的报价列表,其中显示了使用foreach的列表.每次foreah循环时,它会构建一个表单和一个提交按钮,将我带到控制器中的"BookingStage1"操作.我还添加了一个隐藏字段,其中填充了特定报价的预订信息.

所以,我希望当它在我的控制器中击中动作结果时,模型将完全填充,就像它与视图一样.但它是空的,没有任何数据.

当用户通过各种搜索,结果和预订屏幕进行时,我希望能够在多个控制器之间传递填充模型...

是否可以将完全填充的模型从视图传递回下一个控制器?

谢谢

在我的搜索结果页面中,我有以下表格:

using (Html.BeginForm("BookingPage1", "SearchResults", FormMethod.Post))
Run Code Online (Sandbox Code Playgroud)

我在表单中也有一个隐藏字段如下:

<input type="hidden" id="BookingID" name="ChosenBookingID" value='@item.QuotationID' />
Run Code Online (Sandbox Code Playgroud)

发布到我的控制器,看起来像这样:

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

但是路径总是空的:(

Hen*_*nyH 36

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

这是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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我们也有拥有一个方便的模型列表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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在家庭控制器中我们有默认的索引操作,对于这个例子,它会生成两个出租车司机并将它们添加到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));
}
Run Code Online (Sandbox Code Playgroud)

视图的代码如下:

@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>
}
Run Code Online (Sandbox Code Playgroud)

ActionLink的负责重新定向到的预约动作主页控制器(和传递适当TaxiInfo对象),它是defiend如下:

    public ActionResult Booking(TaxiInfo Taxi)
    {
        return View(Taxi);
    }
Run Code Online (Sandbox Code Playgroud)

这将返回以下视图:

@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>
Run Code Online (Sandbox Code Playgroud)

视觉游览:

索引视图

预订视图

  • 你们有没有互相合作过?我需要关闭lol (34认同)
  • 这是优步的开始吗? (5认同)
  • 不幸的是哈哈哈没有:( (4认同)
  • @ReeceKenney没有.我的出租车创业公司大火烧了! (3认同)
  • 薪水是多少?;) 哈哈.很高兴我能帮助你 :) (2认同)
  • 在此答案中,@Html.ActionLink("Home","Booking",TaxiInfo) 仅传递 Model.TaxiInfoList 的一个值。如何将整个 Model.TaxiInfoList 发布到 ActionMethod? (2认同)