0
每一件事情發展順利,我所有讓我得到與價值的新模式進行修改,但東西,在最後步驟 出錯,我的模型驗證狀態爲真 值這是我的職務控制器如何解決這個修改控制器?
[HttpPost]
public ActionResult Edit(Problem problem, HttpPostedFileBase fileUpload)
{
Problem Edproblem = db.Problems.Find(problem.Id);
ViewBag.ATMId = new SelectList(db.ATMs, "Id", "AtmNumber", Edproblem.ATM.AtmNumber);
ViewBag.UserId = WebSecurity.GetUserId(User.Identity.Name);
ViewBag.ProblemTypeId = new SelectList(db.ProblemTypes, "Id", "Name", Edproblem.ProblemTypeId);
var bankId = from e in db.ATMs where e.Id == problem.ATMId select e;
ViewBag.BankId = new SelectList(db.Banks, "Id", "Name", bankId);
ViewBag.AreaId = new SelectList(db.Areas, "Id", "Name", db.Areas.Where(p => p.Id == Edproblem.ATM.AreaId));
ViewBag.GovId = new SelectList(db.Governates, "Id", "Name", Edproblem.ATM.Area.GovernateId);
Problem beforeEdit = db.Problems.AsNoTracking().First(p => p.Id == problem.Id);
if (ModelState.IsValid)
{
DateTime now = DateTime.Now;
if (!Directory.Exists(Server.MapPath("~/UploadImages/" + now.ToString("yyyy_MM/"))))
{
Directory.CreateDirectory(Server.MapPath("~/UploadImages/" + now.ToString("yyyy_MM/")));
}
if (!Directory.Exists(Server.MapPath("~/UploadImages/" + now.ToString("yyyy_MM/") + Edproblem.ATMId.ToString())))
{
Directory.CreateDirectory(Server.MapPath("~/UploadImages/" + now.ToString("yyyy_MM/") + Edproblem.ATMId.ToString()));
}
if (!Directory.Exists(Server.MapPath("~/UploadImages/" + now.ToString("yyyy_MM/") + Edproblem.ATMId.ToString() + now.ToString("/dd/"))))
{
Directory.CreateDirectory(Server.MapPath("~/UploadImages/" + now.ToString("yyyy_MM/") + Edproblem.ATMId.ToString() + now.ToString("/dd/")));
}
var image = WebImage.GetImageFromRequest();
if (fileUpload != null)
{
string fileName = fileUpload.FileName.ToString();
fileName = Guid.NewGuid().ToString() + fileName.Substring(fileName.LastIndexOf("."));
fileName = now.ToString("yyyy_MM/") + problem.ATMId.ToString() + "/" + now.ToString("dd/") + fileName;
if (fileUpload != null && fileUpload.ContentLength > 0)
fileUpload.SaveAs(Server.MapPath("~/UploadImages/" + image));
image.Save(Server.MapPath("/UploadImages/" + fileName));
problem.ImagePath = fileName;
}
else
{
if (problem.ImagePath == null)
{
var getPath = (from e in db.Problems
where e.Id == problem.Id
select e.ImagePath).ToList();
problem.ImagePath = getPath[0].ToString();
}
}
problem.UserId = WebSecurity.GetUserId(User.Identity.Name);
db.Entry(problem).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(problem);
}
這是錯誤,因爲它恰好出現:
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
如果您不打算使用它,爲什麼要將一個Problem對象加載到變量beforeEdit中? – scheien
我正在嘗試從存儲的數據中獲取舊值但錯誤消息中沒有任何更改 您可以說沒用的步驟 – Sonic
難道您不能用新數據填充beforeEdit,然後保存那個嗎?加載它沒有AsNoTracking(),然後填充UserId,圖像路徑等。 – scheien