我創建了一個數據庫,然後使用VisualStudio Exrpess 2013用於WEB,並創建了一個MVC解決方案,並創建了一個ViewModel以顯示帶有下拉列表的編輯視圖。 視圖模型只包含PartnerList類型的屬性'parlists',它是代表數據庫主表的模型,以及2個用於在視圖中創建下拉列表的SelectList類型屬性。 的視圖模型的代碼如下:對DbContext的更改未保存 - MVC實體框架
public class FileStatusEdit
{
public SelectList HoldingsStatus { get; set; }
public SelectList RealGainStatus { get; set; }
public PartnerList parlists { get; set; }
}
在控制器我對HTTPGET編輯方法以下代碼:
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編輯方法沒有將更改保存到數據庫。代碼如下:
[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);
}
正如你可以看到我傳遞的視圖模型(newParList)到EditPost方法,然後我用TryUpdateModel更新。通過進入調試過程,我可以看到數據庫記錄newParList.parlists正確更新了用戶輸入,但是當執行db.SaveChanges()步時,程序將重定向到Index視圖而不保存對數據庫的更改。 我試着使用附加建議在一些職位,但我相信附加步驟已經包含在行'db.Entry(newParList.parlists).State = EntityState.Modified;'這並沒有確實解決問題。 我檢查了很多帖子,並嘗試了不同的解決方案,但他們都沒有工作,所以我希望得到一些幫助。
謝謝你的建議。我找到了解決方案,並將其發佈爲我的問題的答案。 – UbuntuDude 2014-09-27 09:58:31
我剛剛發現,如果你創建了一個不完整的記錄,即丟失了外鍵,而不是拋出一個驗證錯誤,它只是跳過保存的記錄,所以當一切看起來成功時,沒有任何東西被保存 – MikeT 2016-06-28 10:30:21