2011-12-28 41 views
1

我正在尋找一些建議,或者我可能已經忽略了一個解決方案,因爲我正在處理的項目中存在一個問題。它涉及在幾個請求之間保持ViewModel數據。這裏有一個例子:MVC - 在請求之間保留viewmodel數據

用戶是包含了一些表單域和相關的基礎模型項目的網格在特定頁面上。用戶需要將一個或多個項目添加到網格中,因此我必須將它們重定向到另一個頁面以選擇其中一些項目。用戶在此頁面上選擇了他們的項目後,我需要將它們發送回原始頁面並顯示在網格中的項目。

我有這個工作,但我正在做的是在他們被重定向到第二頁之前,我將原始頁面的ViewModel存儲在會話中,用第二頁上選定的項目適當地更新ViewModel,然後重定向回原始頁面並使用會話中的ViewModel來填充表單字段和網格。

不過,我不認爲這是最好的解決方案和可擴展性將是一個問題,因爲這個項目需要具有可擴展性,並在會議上圍繞扔東西不是期望的解決方案。我已閱讀了大量建議的類似問題,但我沒有發現與我的具體情況確實相關的任何內容。

有沒有人做過這樣的事情,並已發現了更多可靠的解決方案,或者可能有不同的實現提出了一些建議。謝謝。

回答

1

這涉及到基本的Web請求限制,每個請求基本上都是「重新開始」。 Session絕對是爲了讓你有一個地方來存儲請求模型之外的東西,並且是你唯一的選擇,除非你想採用更高級的方法來使用javascript。

結帳this post我已經介紹過的主要解決方案,用於編輯列表和一些此處適用。

在你的情況下,我一定會推薦使用模式/對話框彈出選擇你的「其他」項目,因爲這將消除你將遇到的大部分麻煩,通過完全導航離開頁面(如果使用該頁面在其他地方,您可以輕鬆地重新使用部分視圖,使其在對話框以及不重複的頁面中工作)。 這將涉及一個小的JavaScript,但會更容易管理,因爲表單實際上會保留在頁面上,在大多數情況下,我遇到的是更好的用戶體驗。

或者你需要跨越其他頁面使用隱藏的輸入,並通過選擇過程周圍張貼您的數據。看不到很多方法,這不會變得醜陋。

總之,使用會話,如果你不想做一個客戶端解決方案的唯一選擇。我推薦客戶端解決方案,因爲jQuery讓我們的生活在這些場景中變得更容易,但它更復雜。

PS如果你確定對話不是最好的選擇並堅持會話,不要驚慌於它的可伸縮性,因爲有些方法可以通過使用其他會話存儲方法(如狀態服務器,甚至是專用的SQL數據庫爲它。

+0

謝謝,蓋茨。將此標記爲答案,因爲您爲我提供了大量有用的信息,並且讓我的頭腦發揮了作用。我喜歡客戶端/部分觀點的建議,我認爲這可能是我的方式,因爲昨天與我的老闆討論過後,還有其他原因,我們可能想從我們在此的某些表單中創建部分視圖項目。但我需要做更多的思考和規劃。但是,感謝您的信息,非常感謝。 –

+0

謝謝詹姆斯,很高興幫助。也認爲你正在採取正確的做法,稍微退一步並制定一些計劃。一年前,我發現自己處於你的情況之中,並且幾次嘗試簡化它只是浪費了我的時間。正確的解決方案(和這個問題的清單問題)是非常特定的情況下,並在正確的情況下解決它爲我的網站採取了一些工作,但已經支付了我的時間10倍以上的可靠的可重複使用做法。祝你好運! – Gats

相關問題