【发布时间】:2020-07-07 16:57:16
【问题描述】:
您好,我有一个控制器方法,我想返回看起来像这样的视图模型
这是硬编码后的样子
public ActionResult SpecialOrderSummary(int? id)
{
// Retrieve data from persistence storage and save it to the view model.
// But here I am just faking it.
var vm = new ItemViewModel
{
ItemId = 123,
ItemName = "Fake Item",
Parts = new List<ItemPartViewModel>
{
new ItemPartViewModel
{
PartId = 1,
PartName = "Part 1"
},
new ItemPartViewModel
{
PartId = 2,
PartName = "Part 2"
}
}
};
return View(vm);
}
但我显然不希望它被硬编码。所以这就是我试图做的,而不是实现我的目标
public ActionResult SpecialOrderSummary(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
JobOrder jobOrder = db.JobOrders.Find(id);
if (jobOrder == null)
{
return HttpNotFound();
}
ViewBag.JobOrderID = jobOrder.ID;
ItemInstance ii = db.ItemInstances.Where(x => x.serialNumber == jobOrder.serialNumber).FirstOrDefault();
Item item = db.Items.Find(ii.ItemID);
var vm = new ItemViewModel
{
ItemId = item.ItemID,
ItemName = item.Name,
Parts = new List<ItemPartViewModel>
{
foreach(ItemHasParts ihp in item.IHP)
{
Part part = db.Parts.Find(ihp.PartID);
new ItemPartViewModel
{
PartId = part.ID,
PartName = part.Name
};
}
}
};
return View(vm);
}
但这不起作用。因为它似乎无法识别结束 }
开头的“零件”和开头的“vm”括号,因为它跳过了两者。这是为什么呢?
【问题讨论】:
-
这会以什么方式失败?这是使用调试器单步执行代码并观察其确切行为的好机会。有错误吗?意想不到的结果?还有什么?
-
对不起,我会添加错误消息。我刚刚得到了一些红线,所以我认为我只是做错了@David
-
@David 现在只是不认识开头部分 { 的结尾 }。它关闭了方法,而不是关闭“部分”。而不是关闭“vm”,而是关闭整个控制器。似乎它只是忽略了 vm 和打开的部分 {
-
您可能只是在某处缺少括号或分号。您的第一个示例在上面缺少一个。
-
@Nikki9696 哎呀,这只是一个复制和粘贴错误。但无论如何,问题出在第二个例子上。你看到什么了吗?
标签: c# asp.net-mvc model viewmodel