我有一个包含多个表的模型。我的编辑视图允许用户修改主表ICS_Transactions中的单个记录。基于用户选择的操作(从下拉菜单中)。 。 。我需要更新辅助表(ICS_Supplies)中的字段。简而言之,显示库存数量的字段(OnHand)需要更新为OnHand Amount减去订购数量。
我遇到的问题是我的编辑视图更新了ICS_Transaction表,但是我还需要更新ICS_Supplies表。而且因为MVC5和控制器(以及Entity Framework和C#)的使用对我来说还比较陌生。 。我在挣扎。我来自较早的asp.net网络表单,我只是在vb.net中编写sql并在事件中执行它。
我有一个包含两个表中所有字段的类
class MedAdmin(admin.ModelAdmin):
inlines = (CommentInline,)
def save_related(self, request, form, formsets, change):
for formset in formsets:
list_comment = formset.save(commit=False)
for comment in list_comment:
comment.user = request.user
return super().save_related(request, form, formsets, change)
然后,在我的编辑控制器上,我有以下
public class Edit2ViewModel
{
public int? TransID { get; set; }
[Display(Name = "Supplies")]
public string ItemDescription { get; set; }
[Display(Name = "Contact")]
public string ContactName { get; set; }
[Display(Name = "Delivery Unit")]
public string DeliveryUnit { get; set;}
public string Street { get; set; }
public string Building { get; set; }
public string Room { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string PhoneNumber { get; set; }
public string UnitMeasure { get; set; }
public string CurrentStatus { get; set; }
public int? OnHand { get; set; }
public int? UnitsOrdered { get; set; }
}
这是我开始迷路的地方。到目前为止,一切正常。在“我的编辑视图”上,我可以使用“查看包”中的值来填充现有库存量的视图。订购的库存量,然后处理订单后的剩余库存量(Viewbag.Total)。这些值不在ICS_Transactions表中。 。这就是为什么我使用Viewbag将它们从ICS_Supplies表中拉出的原因。
但是现在,当用户处理订单并点击保存按钮时,我想用手头上的新金额(Viewbag.Total)更新ICS_Supplies表(而不是ICS_Transactions表)。但是我无法弄清楚如何后退到控制器并更新ICS_Supplies表。
这是我的编辑/邮政编码(到目前为止)。我认为这是我要更新代码的地方,但是我需要一些入门帮助。 。 。
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
ICS_Transactions iCS_Transactions = db.ICS_Transactions.Find(id);
if (iCS_Transactions == null)
{
return HttpNotFound();
}
// Find User Friendly Values
var r = from tr in db.ICS_Transactions
join un in db.ICS_Units
on tr.DeliveryUnitID equals un.DeliveryUnitID
join kt in db.ICS_Contacts
on tr.Contact equals kt.LoginID
join sp in db.ICS_Supplies on tr.SuppliesID equals sp.Supplies_ID
where tr.TransID == id
select new Edit2ViewModel
{
ItemDescription = sp.ItemDescription,
ContactName = kt.ContactName,
DeliveryUnit = un.DeliveryUnit,
Street = un.Street,
Building = un.Building,
City = un.City,
State = un.State,
ZipCode = un.ZipCode,
PhoneNumber = un.PhoneNumber,
UnitMeasure = sp.UnitMeasure,
CurrentStatus = tr.CurrentStatus,
OnHand = sp.OnHand,
UnitsOrdered = tr.UnitsOrdered
};
// set user friendly values as ViewBag
ViewBag.Stock = r.FirstOrDefault().OnHand;
ViewBag.Ordered = r.FirstOrDefault().UnitsOrdered;
ViewBag.Total = (int)ViewBag.Stock - (int)ViewBag.Ordered;
return View(iCS_Transactions);
}