我有一個Save方法,它有一些額外的服務器端驗證。如果失敗,我想在瀏覽器中維護「/ Edit/id」網址,以便刷新會保留在頁面上。 (如果在這種情況下是不可能的,請讓我知道。)如何在保存操作中保留編輯URL和現有數據
這裏是如何我試圖做現在這個正確的簡略視圖:
比URL,最大的問題[HttpPost]
public ActionResult Save(UserEditModel model) {
try {
repository.SaveUser(model.CopyTo());
}
catch (InvalidOperationException ex) {
// Doing this to just display it at the top of the page as it is not property-specific.
TempData["UserError"] = ex.Message;
// Doing this to maintain the "Edit/id" URL.
return RedirectToAction("Edit", "Users", new { id = model.Id });
}
// Want to keep the URL on the Index page as "Users", instead of "Users/Save".
return RedirectToAction("Index", "Users", new { page = model.Page });
}
其他我遇到這種情況是因爲我正在重定向,所以我也失去了用戶在失敗的保存嘗試中輸入的所有數據。
我已經嘗試在編輯操作中添加一個可選的UserEditModel
參數,默認爲null,但當從頁面上的鏈接導航到編輯操作時(不是從保存操作重定向),可選的模型參數被默認到new UserEditModel()
而不是默認值null我給它在參數列表中。
你是不是指'TempData',因爲重定向,ViewBag和ViewData被清除,是正確的? – krillgar
這是一個體面的想法,我可以看到使用。但是,我會改進它,而不是將屬性單獨存儲在TempData中,存儲整個Model對象。然後,在頁面頂部的Razor塊中,檢查該對象是否存在於TempData中,如果存在,請在模型上運行Copy方法以覆蓋所有屬性。這樣你不需要每個文本框周圍的'if/else'。 – krillgar
是的。如你所說,效果更好。 –