2016-01-05 33 views
0

對於一個網站,請考慮以下情況:正確地傳遞複雜對象不使用的TempData/ViewBag/ViewData的

  1. 用戶輸入數據,包括ID,並提交
  2. 一個相關的控制器將處理請求。此時,將創建一個複雜對象(通過調用具有該ID的Web服務)以進行一系列操作。 e.g校驗等
  3. 返回用戶的特定視圖
  4. 用戶輸入另一組數據並提交
  5. 另一個控制器將處理此請求。它需要在第2步

等使用的複雜的對象...

目前,在步驟5中,我將使用ID來再次獲得所需的複雜對象調用Web服務。

有沒有任何正確/有效的方法,而不使用TempData/ViewBag/ViewData,以便我可以在第2步中重用複雜的對象,一旦它被創建?

編輯: 會話也是不允許的。

+0

通過使用會話。 – CodeCaster

+0

目前還不清楚爲什麼你的對象是由Web服務創建的,而不是僅僅在步驟2中使用模型綁定。你可以發佈你的相關操作方法嗎? – NightOwl888

+0

爲什麼你不創建視圖模型並使用會話來達到這個目的? –

回答

1

通常,對於web application,根據您的需要可以有多種選項來存儲複雜的對象。我不認爲有這樣做的BEST方式,只有最合適的方式和每一個解決方案,將帶着利弊


服務器端

  • 會議我知道你說不能使用會話,但我只是想包括它):第一個選項浮現在腦海,適合大多數web應用程序陽離子。由於現代網絡的發展更多的是STATELESS,很多人都希望不惜一切代價避免使用Session。然而,裏有一些特定的基礎設施配置,以支持會議無國籍應用程序,例如distributed sessionsticky session或者你可以在一個dedicated serverdatabase保存會話。

    • 的觀光:簡單易用,支持Web應用程序自然
    • 缺點:需要配置很多東西與無狀態應用
  • 另一個專用服務器(工作之前有人問,我把它放在服務器端部分,即使它是另一臺服務器,但對我來說,無論我們的控制是SERVER SIDE) :這裏有幾個選項供您選擇,第一個選項可能是設置緩存服務器(Redis?)並使用密鑰(類似於會話)檢索/保存,或者您可以簡單地編寫應用程序以使用您自己的方法檢索/保存邏輯。

    • 的觀光:可重用性,擴展性,適用於所有的
    • 缺點應用不只是網絡,有自己的範圍:難以建立
  • 數據庫:不是很明顯但數據庫確實支持這種要求

    • 的觀光:可重用性,擴展性,適用於所有的應用程序而不只是網絡
    • 缺點:性能問題
  • 其他內存選項(TempData的,ViewBag等)

    • PROS:易於使用,良好的ASP支持。NET MVC
    • 缺點:somtimes很難繞過多個視圖

客戶端

  • 有這麼多的選擇在這裏選擇像使用隱藏字段,Cookie的localStoragesessionStorage的,等等,甚至一個簡單的查詢字符串,將工作
  • 的觀光:速度(因爲你不需要客戶端 - 服務器交通)
  • 缺點:安全(你不能信任來自客戶端的任何東西),不是太複雜的對象(重物),安全性(敏感數據)做的很好,等

建議的解決方案

我希望我正確地理解你的問題,但在我看來,你不應該存儲複雜的對象,只需將複雜對象的ID存儲在的地方您的選擇,並進行查詢每次需要這個對象。所以你的對象總是最新的,你不會浪費資源來存儲複雜的對象。

希望它可以幫助你。

+0

雖然它沒有完全解決我的問題,但利弊是建設性的。謝謝。 –

0

如果要將對象投影到某個視圖,然後忘記任何存儲(TempData/ViewBag/ViewData/Session),然後將同一對象發佈到另一個控制器,則可以重新構建對象的最佳方式將對象的屬性存儲爲隱藏的<input>控件。

+0

爲什麼這是「最好」的方式?然後,您必須讓所有鏈接都做POST,並且您不能相信用戶輸入。 – CodeCaster

+0

當然這只是一般的想法,你還應該加密並簽名 - 這樣用戶將無法以純文本查看它,並且它們將無法在響應中僞造不同的值。 –

+2

這不是你的答案,使它變得更加複雜。 – CodeCaster

相關問題