C# 表单发布上的ViewModel中出现意外空值
您好,我有一个填充viewmodel的方法,如下所示C# 表单发布上的ViewModel中出现意外空值,c#,asp.net-mvc,forms,viewmodel,C#,Asp.net Mvc,Forms,Viewmodel,您好,我有一个填充viewmodel的方法,如下所示 foreach (ItemHasParts ihp in item.IHP) { Part part = db.Parts.Find(ihp.PartID); vm.Parts.Add(new ItemPartViewModel { ID = part.I
foreach (ItemHasParts ihp in item.IHP)
{
Part part = db.Parts.Find(ihp.PartID);
vm.Parts.Add(new ItemPartViewModel
{
ID = part.ID,
PartID = part.PartID,
PartLink = part.PartIDLink,
MFGNumber = part.MFG_number,
QtyInItem = ihp.qty,
OnHand = part.On_Hand,
OnWorkOrder = part.On_Order_Count(true, true),
Committed = part.CommittedCount(true, true),
FSTK = part.FSTK,
PartName = part.Name,
SelectedActionType = PartActionType.Transfer
});
}
这是Post方法,我在这里检查本地人
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SpecialOrderSelection(ItemViewModel model)
{
//list of transfers
//list of harvests
//list of disposals
if (ModelState.IsValid)
{
JobOrder jobOrder = db.JobOrders.Find(model.Id);
if (jobOrder == null)
{
return HttpNotFound();
}
ViewBag.JobOrderID = jobOrder.ID;
// do whatever with 'model' and return or redirect to a View
}
ViewBag.submitted = true;
return View(model);
}
其中一些在事后具有正确的值,但一些在回发时返回null,例如PartID,即使Part.PartID不为null
为什么会这样?没有足够的信息来解决这个难题。重要的是表单在HTML中的外观。似乎有两种类型:
ItemViewModel
和ItemPartViewModel
。表单post似乎正在将ItemViewModel
的实例发送到控制器操作speciallorderselection
。您不应该期望零件
集合会自动水合。@GlennFerrie为什么会正确填充一些数据呢。不是所有内容都是空的吗?您的表单将数据发布到控制器操作,ASP.NET将解释该表单的post正文,并根据约定,根据名称匹配填充模型中的字段。如果您将输入参数的类型从InputViewModel
切换到FormCollection
,您将更准确地看到表单发送到控制器的内容。@GlennFerrie-hmm您认为AJAX帖子可能是一个好的选择吗?我认为这会很好地工作。然后你可以发布一个更复杂的对象。没有足够的信息来解决这个难题。重要的是表单在HTML中的外观。似乎有两种类型:ItemViewModel
和ItemPartViewModel
。表单post似乎正在将ItemViewModel
的实例发送到控制器操作speciallorderselection
。您不应该期望零件
集合会自动水合。@GlennFerrie为什么会正确填充一些数据呢。不是所有内容都是空的吗?您的表单将数据发布到控制器操作,ASP.NET将解释该表单的post正文,并根据约定,根据名称匹配填充模型中的字段。如果您将输入参数的类型从InputViewModel
切换到FormCollection
,您将更准确地看到表单发送到控制器的内容。@GlennFerrie-hmm您认为AJAX帖子可能是一个好的选择吗?我认为这会很好地工作。然后可以发布更复杂的对象。