【发布时间】:2011-01-30 23:00:38
【问题描述】:
我正在对我继承的 C# MVC 应用程序进行修改。
我有一个数据库,为了简单起见,我将只关注我正在处理这个 linq 查询的两个表。
物品
ItemID Int PK
项目名称
RepairSelection(是或否)
RepairID Int FK
修复
RepairID Int PK
维修类别
提交日期
DateSentForRepair
好的,所以 ItemID 几乎是标识符,显示修复详细信息的视图如下所示 (sn-p):
<%= Html.LabelFor(x => x.ItemID)%>
<%= Html.DisplayFor(x => x.ItemID)%><br />
<%= Html.LabelFor(x => x.Repair.RepairCategory)%>
<%= Html.DisplayFor(x => x.Repair.RepairCategory, "FormTextShort")%><br />
<%= Html.LabelFor(x => x.Repair.SubmissionDate)%>
<%= Html.DisplayFor(x => x.Repair.SubmissionDate)%><br />
<%= Html.LabelFor(x => x.Repair.DateSentForRepair)%>
<%= Html.DisplayFor(x => x.Repair.DateSentForRepair)%><br />
<%= Html.ActionLink("Edit Repair Details", "Edit", new { ItemID= Model.ItemID})%>
这是 GET 编辑操作:
public ActionResult Edit(Int64? itemId)
{
ModelContainer ctn = new ModelContainer();
var item = from i in ctn.Items where i.ItemID == itemId select i;
return View(item.First());
}
这也很好,GET Edit 视图显示正确的详细信息。我卡住的地方是更新修复表的 linq 查询。今天我尝试了很多方法,以至于我的头都炸了(你可能已经猜到了 Linq 的新手)。我最近的尝试就在这里(我知道这还很遥远,所以放轻松;-)):
[HttpPost]
public ActionResult Edit(Int64 itemId, Repair repair, Item item, FormCollection formValues)
{
if (formValues["cancelButton"] != null)
{
return RedirectToAction("View", new { ItemID = itemId });
}
ModelContainer ctn = new ModelContainer();
Repair existingData = ctn.Repair.First(a => a.RepairId == item.RepairID && item.ItemID == itemId);
existingData.SentForConversion = DateTime.Parse(formValues["SentForConversion"]);
ctn.SaveChanges();
return RedirectToAction("View", new { ItemID = itemId });
}
对于上述尝试,我得到一个 Sequence Contains No Elements 错误。
任何帮助或指针将不胜感激。谢谢大家。
【问题讨论】:
标签: c# asp.net-mvc linq controller