我正在研究一個Web應用程序,它涉及用戶填寫跨多個頁面的多步表單。表單的頂部有標籤導航(這些鏈接不提交當前頁面)和底部的下一個按鈕(它提交)。我正在考慮處理表單提交/驗證的幾種策略:.NET中多頁表單的最佳實踐/設計MVC3
一個操作方法和每個表單頁面的查看。當你點擊下一頁時,它會將表單提交給下一頁的操作方法。如果有驗證錯誤,你將被重定向回到前一頁:
- URL的是描述性的,可以複製粘貼
- 只有重定向錯誤的情況下
- 由於重定向沒有形式數據,我們失去了關於提交的上下文,這使得難以顯示某些錯誤消息
- 如果用戶嘗試訪問他們尚未準備好的流中的某個步驟,則重定向用戶的驗證邏輯相同
一個操作方法和查看每個表單頁面。當你點擊下一頁時,它會將表單提交給當前頁面操作。如果存在驗證錯誤,則返回相同的視圖。否則,我們重定向到下一個頁面動作:
- URL的是描述性的,可以複製粘貼
- 導向是很常見的(不知道這是不好的)
- 當顯示驗證錯誤,我們作爲表單提交了同樣的要求,所以我們有充分的機會來了無效的輸入
- 傳遞額外的背景下,如果我們想,例如,添加「上一步」按鈕,還提出
- 的能力
所有頁面的一個操作方法。 URL包含有關正在提交的步驟的其他上下文(例如
MyController/MyAction/{step}
)。控制器消息根據驗證和當前步驟選擇要返回哪個視圖頁面。- URL的不是描述性的(例如,如果我提交步驟1到步驟2,然後該URL的用戶看到將是一樣的,不管第1頁(無效)或2頁是否返回
- 沒有重定向
- 當顯示驗證錯誤,我們是在爲表單提交了同樣的要求,所以我們有充分的機會來了無效的輸入
一種不同的方法,我還沒有在這裏列出
我試圖枚舉我所看到的一些每種方法的優點和缺點,但我很想知道:
- 什麼是這些方法的其他優點和缺點?我的正確嗎?我列舉的一些缺點是否可以設計出來?
- 有沒有一個標準的方法來解決這個問題,我應該使用?如果是這樣,爲什麼這是標準方法?
聽起來像你需要接受處理請求和返回(在大多數情況下)視圖的行爲的概念。通過爲每個表單頁面執行操作,您可以擁有特定於該頁面上的數據的視圖模型。如果模型無效或者下一頁的視圖,該操作可以返回相同的視圖。不需要重定向。你可以在你的'form'中使用'hidden'輸入來傳遞上下文。 – HABO
@HABO:但是如果我沒有重定向並且用戶在頁面1上提交了無效的內容,那麼即使返回的視圖是第1頁的無效視圖,他們是不是仍然會看到第2頁的url? – ChaseMedallion
您的操作選擇適當的視圖返回:第1頁或第2頁。它的決定方式取決於您。瀏覽器顯示所得到的內容,但不需要通過重定向請求查詢不同的頁面。 – HABO