WEB 용 VisualStudio Exrpess 2013 및 을 사용하여 데이터베이스를 만든 다음 MVC 솔루션을 만들었습니다. 드롭 다운 목록이있는 편집 뷰를 표시하기 위해 ViewModel을 만들었습니다. 뷰 모델에는 데이터베이스의 주 테이블을 나타내는 모델 인 PartnerList 유형의 'parlists'속성과 뷰에서 드롭 다운 목록을 만드는 데 사용하는 SelectList 유형의 2 가지 속성 만 포함됩니다. 나는 HttpGet 편집 방법에 대한 다음 코드를 컨트롤러에서DbContext의 변경 내용이 저장되지 않았습니다. - MVC 엔터티 프레임 워크
public class FileStatusEdit
{
public SelectList HoldingsStatus { get; set; }
public SelectList RealGainStatus { get; set; }
public PartnerList parlists { get; set; }
}
: 다음과 같이 뷰 모델의 코드는이 코드는 잘 작동하고 뷰가 올바르게 표시됩니다
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var viewModel = new FileStatusEdit
{
HoldingsStatus = new SelectList(db.Statuses, "Status_ID", "Status1", db.PartnerLists.Where(p => p.IntermediaryID == id).Single().AssetDataSource.HoldingsFile.Status_ID),
RealGainStatus = new SelectList(db.Statuses, "Status_ID", "Status1", db.PartnerLists.Where(p => p.IntermediaryID == id).Single().AssetDataSource.RealGainFile.Status_ID),
parlists = db.PartnerLists
.Include(p => p.AssetDataSource)
.Where(p => p.IntermediaryID == id)
.Single()
};
if (viewModel.parlists == null)
{
return HttpNotFound();
}
return View(viewModel);
}
양식을 드롭 다운 목록과 함께 사용하십시오. 꽤 길고 관련성이 없기 때문에 뷰 코드를 생략합니다. 지금까지 너무 좋아. 그러나 내 Http Post Edit 메서드는 데이터베이스에 변경 내용을 저장하지 않습니다. 다음과 같이 코드는 다음과 같습니다
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public ActionResult EditPost(FileStatusEdit newParList)
{
if (TryUpdateModel(newParList.parlists, "",
new string[] { "Firstname", "Surname", "Category", "ClientID", "IntermediaryID", "ExternalRef", "RecordStatus", "Asset_Data_Source_ID", "New_Communication_Issued", "AssetDataSource", "HoldingsFile", "RealGainFile"}))
{
try
{
db.Entry(newParList.parlists).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
catch (RetryLimitExceededException)
{
ModelState.AddModelError("", "Unable to save changes.");
}
}
return View(newParList);
}
당신은 내가 EditPost 방법에 뷰 모델 (newParList)를 통과하고 다음 나는 TryUpdateModel를 사용하여 업데이트 볼 수 있듯이. 디버깅 프로세스를 단계별로 수행하면 데이터베이스 레코드 newParList.parlists가 사용자 입력으로 올바르게 업데이트되지만 db.SaveChanges() 단계가 실행될 때 프로그램이 데이터베이스에 변경 내용을 저장하지 않고 인덱스보기로 리디렉션된다는 것을 알 수 있습니다. 일부 게시물에서 제안한대로 첨부를 사용했지만 첨부 단계가 이미 'db.Entry (newParList.parlists) .State = EntityState.Modified;'줄에 포함되어 있다고 생각합니다. 그리고 그것은 실제로 문제를 해결하지 못했습니다. 많은 게시물을 검토하고 다른 솔루션을 시도했지만 그 중 아무 것도 작동하지 않아 도움이되었습니다.
제안 해 주셔서 감사합니다. 해결책을 찾았는데 제 질문에 대한 대답으로 게시했습니다. – UbuntuDude
불완전한 레코드 즉, 외래 키가없는 경우 유효성 검사 오류가 발생하는 대신 저장시 해당 레코드를 건너 뜁니다. 따라서 모든 것이 성공적으로 보이는 동안 아무 것도 저장되지 않습니다. – MikeT