У меня есть модель, которая включает в себя несколько таблиц. Мое представление редактирования позволяет пользователям изменять одну запись из основной таблицы 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);
}