CRich CRich - 9 days ago 7
HTML Question

How to update an Entity in Entity Framework

I have a Date field in my DB and I'm trying to update it to the current Date when I press the submit button on my webpage but it does not update. I believe I'm doing the correct steps but here is my code.

Controller:

public ActionResult TakeInventory(int? AssetNum, string owners, string locationId, string clientId)
{
ViewBag.LocationId = new SelectList(db.Locations, "LocationKey", "LocationName");
ViewBag.ClientId = new SelectList(db.ClientSites, "ClientSiteKey", "ClientSiteName");
var records = from s in db.Assets select s;
if (AssetNum != 0)
{
records = records.Where(c => c.AssetKey == AssetNum);
}

if (!String.IsNullOrEmpty(owners))
{
records = records.Where(x => x.InventoryOwner.Equals(owners));
}

if (!String.IsNullOrEmpty(locationId))
{
int locnum = Convert.ToInt32(locationId);
records = records.Where(x => x.LocationKey == locnum);
}

if (!String.IsNullOrEmpty(clientId))
{
int clinum = Convert.ToInt32(clientId);
records = records.Where(x => x.ClientSiteKey == clinum);
}


else
{
return View(records);
}
return View(records);

}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult TakeInventory([Bind(Include = "InventoryDate")] Asset asset)
{
if (ModelState.IsValid)
{
db.Entry(asset).State = EntityState.Modified;
asset.InventoryDate = DateTime.Now;
db.Assets.Add(asset);
db.SaveChanges();
return RedirectToAction("Index");

}
return View(asset);
}


View:

@foreach (var items in Model)
{
<p>Last Inventory Date: @Html.DisplayFor(modelItem => items.InventoryDate) </p>
<input type="submit" value="Submit" />


Model:

public partial class Asset
{
public System.DateTime InventoryDate { get; set; }
public Asset()
{
InventoryDate = DateTime.Now;
}
}

Win Win
Answer

You want to retrieve the Asset entity again before updating again.

For example,

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult TakeInventory([Bind(Include = "InventoryDate")] Asset asset)
{
   if (ModelState.IsValid)
   {
      var entity = (from s in db.Assets where AssetNum == asset.AssetNum Select s).FirstOrDefalt();
      entity.InventoryDate = DateTime.Now;
      db.SaveChanges();
      return RedirectToAction("Index");
   }
   return View(asset);
}