2011-04-24 51 views
1

這可能是一個奇怪的問題,但我有MVC3中的表單,通過json發佈到在幕後做了大量工作的控制器。雖然這一切都在進行,但我希望能夠將一些消息返回給用戶,以更新當前狀態。 「聯繫服務器,提交請求」等使用「返回」之前從控制器輸出字符串

看來,雖然我可以說「返回JSON(新...);」到頁面,我不想在整個操作完成之前返回任何內容。那麼在最終返回被調用之前,我怎麼能從控制器返回字符串到頁面呢?首先,這只是一件愚蠢的事情嗎?

回答

2

這是可能的,但我不認爲我會做這樣的事情=)

在動作方法

,如果該請求不是AjaxRequest,渲染你的ViewData設置狀態信息的虛擬視圖(也可以在ViewData中設置表單數據);在該視圖上,發送一個ajaxRequest到相同的URL(如果需要,發佈表單數據)並將響應附加到頁面上。如果請求是AjaxRequest(檢入操作方法),則使用數據呈現真實視圖。

在某些情況下,你可以使用與真正的長期請求一些彗星的技術(例如,在一些大型報表)

+0

嗯,這是一個有趣的技術,聽起來像它可以工作。如果我開始發送太多這樣的請求,網絡服務器將會停止運行,但我認爲我將返回的這幾條消息應該沒問題。乾杯! – boolean 2011-04-24 16:55:58

2

False,

你想要什麼通常稱爲「等待頁面」。我剛剛在SOF搜索「json」等待頁面「」,出乎意料地沒有發現任何東西。一般的做法是,您的控制器攔截「請求可能慢的頁面」的http請求,並立即將「等待頁面」返回給用戶代理。一個典型的「等待頁面」不會給你任何關於你的請求進度的「真實」反饋;我想是因爲這樣做會涉及到很多從客戶端到服務器的基本上非生產性的「往返」(請求)。實際上,我的正常等待頁面只是一個「Processing ... Please wait ...」消息,位於「旋轉齒輪」的動畫GIF上方。您的WaitPage包含一段包含計時器的java腳本,該計時器週期性地向服務器發送「我們還在那裏」請求。如果請求完成,控制器(顯然)將初始請求轉發到結果頁面;如果不是,控制器什麼也不做,等待下一次來自客戶端的時間請求。

這是一個棘手的代碼,我意識到我的回覆與JSON或MVC(如此)沒有任何關係;但是這是過去如何處理這個問題的總體概述......並且沒有人似乎對整體效果抱怨太大。

乾杯。基思。

0

這違反了分層的體系結構方法。相反,您應該在您的網頁上使用ajax和計時器,並向控制器查詢更新。您的控制器可以使用消息緩衝區來存儲更新。

然後,您可以編寫一個單獨的控制器,該控制器在您的主操作正在進行時爲頁面發送的每個查詢返回消息緩衝區中的消息。

0

您是否考慮過websockets或SignalR?上次我看起來SignalR並沒有在Web場中工作,但是它可以在適當的時候啓用雙向對話和服務器,任意推送給客戶端。

相關問題