如何基于视图中的值更新控制器中的表

时间:2019-03-27 18:26:08

标签: c# asp.net-mvc-5

我有一个包含多个表的模型。我的编辑视图允许用户修改主表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);
    }

0 个答案:

没有答案