Каждая вещь идет прямо, я все ценности, которые заставляют меня получить новую модель со значениями, чтобы изменить его, но что-то идет не так на заключительном этапе и мое состояние проверки модели является истинным Это мой пост контроллерКак решить Этот контроллер изменения?
[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.
Зачем загружать объект проблемы в переменную beforeEdit, если вы не планируете его использовать? – scheien
Я пытался что-то вроде получения старого значения из существующих данных, но с ошибкой без изменений в сообщении об ошибке вы можете сказать бесполезный шаг – Sonic
Не можете ли вы заполнить beforeEdit новыми данными, а затем сохранить это вместо этого? Загрузите его без AsNoTracking(), затем заполните UserId, путь изображения и т. Д. – scheien