2011-01-13 53 views

回答

1

你的意思是像.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助手模型的優秀資源。谷歌周圍,你會遇到他們。

0

其他選擇包括cookie或Http緩存 - 什麼阻止你使用會話?

+0

我的理解是HTTP緩存只會持續一次回發。在我看來,Session有時被不良開發者濫用,無法保存大量數據,因爲開發人員不知道如何正確維護狀態。我說這是一個過去曾經犯過這個錯誤的開發者。我對這個問題的研究已經確定,保持狀態的正確方法(至少,本着MVC的精神)是在ViewModel中傳遞適當的狀態。如果可以通過另一種方式做得更好,那麼使用會話變量確實沒有什麼好的理由。 – whoblitz 2011-02-11 20:34:50

+0

@whoblitz - 你做了同樣的錯誤毫秒用viewstate – redsquare 2011-02-11 22:40:46

1

您可以使用隱藏表單字段將值發回服務器並提交每個表單。

0

作爲一個高層次的概念,您不僅應該儘可能少地依賴Session來存儲您的狀態,而且應該儘可能少地依賴Web應用程序中的狀態。這個想法是,網頁本身是無狀態的設計,當在這個範例中設計軟件時,軟件應該被設計爲擁有無狀態的本質。

更具體地說,使用ViewModel可以爲您的視圖傳遞給客戶端所需的數據提供強類型表示。持有約一個給定的請求的狀態,這可以從該視圖中進行可被添加到可能是多種方式的視圖的信息,但數據塊的兩個最直接的是:

  1. 爲隱藏表單域元素
  2. 至於請求

檢查出NerdDinner教程的標準方法,使用任一ViewData的或強類型的視圖模型的URL的部分。一些Google搜索將一如既往地提供更多信息和教程。但請特別注意教程在視圖中使用ViewModel屬性的位置。這些可以在HTML呈現中的任何地方使用,無論是在HTML助手還是手動構建標記。

關於網絡的無狀態(以及這個整體並不像人們想象的那樣新的REST事物)的更多有趣閱讀是文章:How I Explained REST to My Wife

0

如果你用會話變量主要問題是實際性的(想要的東西,對單個請求有效,而不必擔心清潔起來等),而不是要求不使用會話,然後使用到TempData詞典。它只處理會話中的信息,僅針對單個請求,之後框架會自動將其刪除。

相關問題