MVC4将模型传递给控制器​​ - 一些Model Null

时间:2013-05-04 15:13:37

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

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

我有一个像这样的主要引用类:

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的值,但是taxiPartner和taxiCompany中包含的值都是NULL?

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

有人能看到我做错了吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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