2017-09-01 75 views
0

我有一個完成了幾個部分的表單項目。例如。第1部分可能包含您的姓名,第2部分可能包含您的地址。後重定向 - 以長/嚮導樣式表格獲取模式

在MVC我有表示每個部件和一個模型的若干視圖,以容納所有表單數據。

我想在每個部分完成保存表單數據,並檢索下一個部分保存的記錄(使整個模型可在每個階段)。

我使用後重定向消息獲得,以避免「形式可以重新提交」使用前進和後退按鈕瀏覽器的警告。

控制器代碼

[HttpGet] 
[Route("Form/Part/{id}")] 
public ActionResult Part(int id, int? recordId) 
{ 
    var model = new MyVM(); 
    if(recordId.HasValue) { 
     // get record from DB 
     // map record to 'model' 
    } 
    return View("Form.{id}", model); 
} 

[HttpPost] 
[Route("Form/Part/{id}")] 
public ActionResult Part(int id, MyVM model) 
{ 
    // map model to entity 
    // save/update entity 
    return RedirectToAction($"Form/Part/{id + 1}", new { recordId = recordId }) 
} 

我的問題是如何最好地保留新創建/更新記錄的ID並把它傳遞到下一個組成部分。

雖然經過recordId作爲routeValue作品,當我使用瀏覽器的後退按鈕作爲查詢字符串recordId丟失它打破。

我已經考慮在會話存儲這也許,但真的不希望把HttpContext發揮,如果我沒有進行測試的原因。

是否有推薦的方法來實現這種事情?任何想法,以不同的方式來跟蹤當前的記錄將不勝感激。

+0

你可以考慮一個cookie(如果'id'是'null',請檢查cookie的值)。而且您還可以添加當前步驟以允許用戶註銷並稍後返回完成(並在最後一步中將其刪除) –

回答

1

您可以使用TempData或Session在請求之間傳遞數據。

我想創建一個大的類/對象從嚮導中的所有領域,把它扔到了會議如關鍵「MyWizardData」,並在嚮導的其他部分進行檢索。

//保存/更新實體

你的ID,把它扔到了會議,並抓住它回到了下一個動作。

如果你不想使用會話,拿到編號後保存/更新,並將其存儲在一個字段在用戶表的數據庫。或者只存儲UserId和你創建的實體行。然後你可以在任何行動中抓住它。