有沒有一種方法,以保持後背上的MVC2之間的信息,而無需使用Session變量或查詢字符串?如何保持MVC2狀態沒有會話或查詢字符串?
回答
你的意思是像.NET Web窗體的視圖狀態?從技術上講,雖然不推薦 - 但使用模型並將模型數據發佈到服務器並將模型推回到視圖中要好得多。
這將很好地工作,但如果你需要的東西是有狀態的WebForms的ViewState的,我會建議在WebForms的做你的項目,或者使用session來保存你的模型。
編輯:構建您的表單,將數據發佈(或獲取)到相同的頁面。然後在你的控制器中,有一個像這樣的方法。
[HttpPost]
public ActionResult LoginUser(LoginViewModel model)
{
//work on the model here
return View(model);
}
這會將用戶剛剛提交的表單數據推回到您的視圖中。然後在你的視圖中有一個像這樣的Html助手。
<%: Html.TextboxFor(m => Model.Username) %>
在網上有一些關於使用html助手模型的優秀資源。谷歌周圍,你會遇到他們。
其他選擇包括cookie或Http緩存 - 什麼阻止你使用會話?
您可以使用隱藏表單字段將值發回服務器並提交每個表單。
作爲一個高層次的概念,您不僅應該儘可能少地依賴Session來存儲您的狀態,而且應該儘可能少地依賴Web應用程序中的狀態。這個想法是,網頁本身是無狀態的設計,當在這個範例中設計軟件時,軟件應該被設計爲擁有無狀態的本質。
更具體地說,使用ViewModel可以爲您的視圖傳遞給客戶端所需的數據提供強類型表示。持有約一個給定的請求的狀態,這可以從該視圖中進行可被添加到可能是多種方式的視圖的信息,但數據塊的兩個最直接的是:
- 爲隱藏表單域元素
- 至於請求
檢查出NerdDinner教程的標準方法,使用任一ViewData的或強類型的視圖模型的URL的部分。一些Google搜索將一如既往地提供更多信息和教程。但請特別注意教程在視圖中使用ViewModel屬性的位置。這些可以在HTML呈現中的任何地方使用,無論是在HTML助手還是手動構建標記。
關於網絡的無狀態(以及這個整體並不像人們想象的那樣新的REST事物)的更多有趣閱讀是文章:How I Explained REST to My Wife。
如果你用會話變量主要問題是實際性的(想要的東西,對單個請求有效,而不必擔心清潔起來等),而不是要求不使用會話,然後使用到TempData詞典。它只處理會話中的信息,僅針對單個請求,之後框架會自動將其刪除。
- 1. Cookie如何保持會話狀態?
- 2. Windows查詢會話狀態
- 3. 連接池會保持oracle會話保持活動狀態嗎?
- 4. 讓Watin會話保持活動狀態
- 5. 使用本地會話保持狀態
- 6. 休眠獲得命名的查詢字符串沒有會話
- 7. 在會話中何處保留查詢字符串參數?
- 8. 與查詢字符串使用狀態
- 9. 如何識別有狀態或無狀態會話bean
- 10. 在查詢字符串中保持狀態的級聯下拉列表
- 11. 尋求輸入:保持服務器會話沒有任何服務器狀態
- 12. 讓查詢框保持打開狀態
- 13. 如何讓RTSP會話保持活動狀態?
- 14. JSch:如何使會話保持活動狀態
- 15. 如何在刷新頁面後保持會話活動狀態
- 16. 如何在彈出窗口中保持iframe的會話狀態?
- 17. 如何保持與Google地球客戶端的會話狀態?
- 18. 301重定向 - 動態URL - 保持查詢字符串
- 19. 訪問會話狀態查詢
- 20. android跨會話保存會話狀態
- 21. 未保存會話狀態
- 22. 如何在URL查詢字符串中存儲程序狀態?
- 23. 如何避免使用AngularJS保持查詢字符串ngRoute
- 24. 如何在angularjs中導航期間保持查詢字符串?
- 25. 是否有可能讓Facebook會話保持活躍狀態?
- 26. SQL會話狀態服務器動態連接字符串
- 27. 如何添加會話超時但保持會話在用戶活動中保持活躍狀態?
- 28. 保持狀態,沒有一個cookie
- 29. Android上的HttpClient沒有保持會話
- 30. 如何保持會話?
我的理解是HTTP緩存只會持續一次回發。在我看來,Session有時被不良開發者濫用,無法保存大量數據,因爲開發人員不知道如何正確維護狀態。我說這是一個過去曾經犯過這個錯誤的開發者。我對這個問題的研究已經確定,保持狀態的正確方法(至少,本着MVC的精神)是在ViewModel中傳遞適當的狀態。如果可以通過另一種方式做得更好,那麼使用會話變量確實沒有什麼好的理由。 – whoblitz 2011-02-11 20:34:50
@whoblitz - 你做了同樣的錯誤毫秒用viewstate – redsquare 2011-02-11 22:40:46