Asp.net mvc 4 模型未在Post上填充

Asp.net mvc 4 模型未在Post上填充,asp.net-mvc-4,Asp.net Mvc 4,我有一个片面的看法 @using (Html.BeginForm(MVC.Inventory.ActionNames.AddVehicles, MVC.Inventory.Name, new { model = Model.Items })) { <div><button>@AuctionControllerResource.AddToBiddingProcess</button></div> } 但这没用 我做错了什么 谢谢 萨钦 编辑

我有一个片面的看法

@using (Html.BeginForm(MVC.Inventory.ActionNames.AddVehicles, MVC.Inventory.Name, new { model = Model.Items }))
{
   <div><button>@AuctionControllerResource.AddToBiddingProcess</button></div>
}
但这没用

我做错了什么

谢谢

萨钦

编辑

附加代码

 public class ListViewModel<T> : IQuery
        where T : class
    {

        public List<T> Items { get; set; }
     ...
}
公共类ListViewModel:IQuery
T:在哪里上课
{
公共列表项{get;set;}
...
}

以下内容与您认为的不同:

new { model = Model.Items }
不能像那样传递复杂对象。如果您想让它工作,您必须在表单中生成隐藏字段

我已经在表格中添加了这个

@Html.HiddenFor(m => m.Items)
@HiddenFor(m=>m.Items)

不,这没用是正常的。隐藏字段仅适用于简单类型。您必须循环遍历集合中的项,并为每个元素的每个属性生成相应的字段:

@using (Html.BeginForm(MVC.Inventory.ActionNames.AddVehicles, MVC.Inventory.Name))
{
    for (var i = 0; i < Model.Items.Count; i++)
    {
        @Html.HiddenFor(x => x.Items[i].Prop1)
        @Html.HiddenFor(x => x.Items[i].Prop2)
        @Html.HiddenFor(x => x.Items[i].ComplexProp3.Prop1)
        @Html.HiddenFor(x => x.Items[i].ComplexProp3.Prop2)
        ...
    }
    <div>
       <button>@AuctionControllerResource.AddToBiddingProcess</button>
    </div>
}
@使用(Html.BeginForm(MVC.Inventory.ActionNames.AddVehicles,MVC.Inventory.Name))
{
对于(变量i=0;ix.Items[i].Prop1)
@Html.HiddenFor(x=>x.Items[i].Prop2)
@Html.HiddenFor(x=>x.Items[i].ComplexProp3.Prop1)
@Html.HiddenFor(x=>x.Items[i].ComplexProp3.Prop2)
...
}
@AuctionControllerResource.AddToBiddingProcess
}
但这似乎是一种浪费。由于用户无法在表单中修改这些值,我建议您只需传递一个id,它将允许您在POST操作中从数据存储中检索相应的项:

@using (Html.BeginForm(MVC.Inventory.ActionNames.AddVehicles, MVC.Inventory.Name, new { id = Model.ItemsId }))
{
    <div>
       <button>@AuctionControllerResource.AddToBiddingProcess</button>
    </div>
}
@使用(Html.BeginForm(MVC.Inventory.ActionNames.AddVehicles,MVC.Inventory.Name,new{id=Model.ItemsId}))
{
@AuctionControllerResource.AddToBiddingProcess
}
然后:

[HttpPost]
public virtual ActionResult AddVehicles(int id)
{
    List<VehicleViewModel> model = GetItemsFromDataStore(id);
    ...
}
[HttpPost]
公共虚拟操作结果添加车辆(int id)
{
列表模型=GetItemsFromDataStore(id);
...
}

型号项目是什么类型的?我可数?IList?请共享AddToBiddingProcess帮助程序代码
[HttpPost]
public virtual ActionResult AddVehicles(int id)
{
    List<VehicleViewModel> model = GetItemsFromDataStore(id);
    ...
}