Как обновить таблицу в контроллере на основе значений в представлении - PullRequest
0 голосов
/ 27 марта 2019

У меня есть модель, которая включает в себя несколько таблиц. Мое представление редактирования позволяет пользователям изменять одну запись из основной таблицы ICS_Transactions. В зависимости от выбранного пользователем действия (из выпадающего списка). , , Мне нужно обновить поле во вторичной таблице (ICS_Supplies). Короче говоря, поле (OnHand), которое показывает количество имеющихся запасов, необходимо обновить до суммы OnHand минус заказанная сумма.

Проблема, с которой я сталкиваюсь, заключается в том, что мой Edit View обновляет таблицу ICS_Transaction, но мне также необходимо обновить таблицу ICS_Supplies. И потому что MVC5 и использование контроллеров (и Entity Framework и C #) для меня относительно новые. , Я борюсь. Я пришел из старых дней веб-формы asp.net, где я просто писал sql в vb.net и выполнял его по событию.

У меня есть класс, который содержит все поля из обеих таблиц

   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; }

}

Затем на контроллере редактирования у меня есть следующее

  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);
    }

Здесь я начинаю заблудиться. Пока что все работает как положено. В «Моем редактируемом виде» я могу использовать значения из Viewbag (ов), чтобы заполнить представление количеством имеющихся запасов. Количество заказанного запаса, а затем оставшийся запас после обработки заказа (Viewbag.Total). Эти значения НЕ находятся в таблице ICS_Transactions. , именно поэтому я использовал Viewbag, чтобы вытащить их из таблицы ICS_Supplies.

Но теперь, когда пользователь обрабатывает заказ и нажимает кнопку сохранения, я хочу обновить таблицу ICS_Supplies (не таблицу ICS_Transactions), указав сумму NEW в наличии (Viewbag.Total). Но я не могу понять, как сделать шаг назад к контроллеру и обновить таблицу ICS_Supplies.

Вот мой Правка / Почтовый индекс (пока). Я думаю, что именно здесь я и поместил бы код для обновления, но мне нужна помощь для начала работы. , ,

 // POST: OrderManagement/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "TransID,SuppliesID,OriginalDate,TransType,LastUpdatedBy,Contact,OpenClosed,CurrentStatus,CurrentStatusDate,RequsitionNumber,PONumber,DeliveryMonth,DeliveryYear,UnitsOrdered,Emergency,Comments,DeliveryUnitID")] ICS_Transactions iCS_Transactions)
    {
        if (ModelState.IsValid)
        {
            db.Entry(iCS_Transactions).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(iCS_Transactions);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...