0

我在将模型从视图上的表单发送到控制器时遇到问题。主类 I 中有数据,但子类丢失了它们的值。

我有一个像这样的主要报价类:

public class Quotation
{
    public string QuotationID { get; set; }
    public TaxiPartner taxiPartner { get; set; }
    public TaxiCompany taxiCompany { get; set; }
    public int maxNumberOfSeats { get; set; }
    public int maxNumberOfBags { get; set; }
    public double price { get; set; }
}

然后例如我有 TaxiPartner 类:

public class TaxiPartner
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List<Address> Addresses { get; set; }
    public bool supportsPasswordReset { get; set; }
    public bool supportsValidatebysms { get; set; }
}

这是我认为的表格

@if (Model.listOfQuotations.Count > 0)
{
<h3>You can book online with:</h3>
foreach (var item in Model.listOfQuotations)
{
    using (Html.BeginForm("BookingPage1", "SearchResults", FormMethod.Post))
    {    

<div class="well">
    <div>
        <h4>@item.taxiCompany.Name</h4>
    </div>
    <div style="float: right;">
        <h2>@string.Format("{0:C}", item.price)</h2>
    </div>
    <div>
        <b>Product Type:</b>
        <img style="width: 15px;" src="~/Content/images/icon-@item.taxiPartner.cabforceProductType-orange-40px.png" />
        (1 = Best Value, 2 = Executive, 3 = Minibus)
    </div>
    <div><b>Services:</b> @item.taxiCompany.services (0 = Outdoor pickup, 1 = Meet & greet pickup)</div>
    <div><b>Maximum Number of Seats:</b> @item.maxNumberOfSeats <b>Maximum Number of Bags:</b> @item.maxNumberOfBags</div>
    <div>@Html.ActionLink("Book Now", "BookingPage1", item, new { @class = "btn btn-success" })</div>
</div>
    }
}

}

然后我在我的控制器中有以下操作:

[HttpPost]
    public ActionResult BookingPage1(Quotation chosenQuote)
    {
        return View();
    }

当我的控制器动作被调用时,我可以看到 QuotationID、maxNumberOfSeats、maxNumberOfBags 和 price 的值,但taxPartner 和taxCompany 中包含的值都是NULL?

我已经调试过,视图中“item”的值确实包含我需要的值,但是一旦到达控制器,它们就消失了。

谁能看到我做错了什么?

4

2 回答 2

1

只有分配给输入类型的模型字段在控制器中可用

于 2013-05-06T09:28:37.570 回答
0

仅仅显示这些值不足以将其传回。如果您有一个没有输入的值,则应使用隐藏值:

@Html.HiddenFor(x=>x.TaxiPartner.Name)

此外,您可能需要考虑一些事情:如果您有一堆未在此视图中使用/显示的属性,您可能需要考虑创建一个单独的视图模型,该模型仅包含该视图所需的值而不是放置一堆隐藏的输入字段来传递不需要的值。

于 2013-05-06T10:59:27.827 回答