2016-10-28 17 views
1

問題

我正在開發使用剃刀頁面(.cshtml),這asyncronously運行使用Process.Start()當用戶點擊一個按鈕控制檯應用程序網站。我已經將事件處理程序連接到進程退出時調用的進程的Exited事件。啓動進程並處理退出的事件都在一個C#類文件(.cs)中完成。處理退出的事件時,將評估進程的ExitCode,以決定向用戶顯示哪些消息。從C#類文件導航到剃刀頁

當前我正在嘗試直接導航到視圖,該視圖包含處理和顯示url參數的代碼。此導航每次都會失敗。

嘗試

我已經推斷出這個參數是不是完全刪除它,並試圖簡單地重定向到一個頁面的問題。

當我嘗試HttpContext.Current.Response.Redirect("~/Folder/File.cshtml)我得到一個

的NullReferenceException:未將對象引用設置到對象的實例。

當我嘗試通過HttpContext.Current從取得的初步Process.Start()調用C#類文件中使用的Response.Redirect()控制器我得到一個

的ArgumentException:值不在預期的範圍內。

附加

,該事件是由一個過程引發的事實可能是無關緊要的,因爲核心問題似乎從C#類文件剃刀頁面重定向。我的目標是在流程完成後更新Razor視圖,以通知用戶成功或失敗。

+3

我不熟悉ASP.NET網頁。但Web的基本原理不會改變 - 您不能讓服務器在請求/響應上下文之外重定向客戶端。您需要用戶手動執行刷新(從而導致新的請求),或者讓AJAX或websockets異步通信回服務器。 – mason

回答

1

爲了在兼容網絡的方式來解決這個問題,我會建議使用下列方法之一:

如果在啓動該過程非常短暫:

開始時在請求中進行處理,在將請求返回給客戶端之前等待該進程完成。

如果這個過程需要幾秒鐘就可以完成:

在這種情況下,使用SignalR是因爲它支持推動郵件從服務器到客戶端一個不錯的選擇。有關SignalR的詳細信息和示例,請參見link

基本上,當請求到達服務器時,您將開始處理該項目。將視圖返回給通知用戶該項目正在處理的客戶端。一旦該項目已被處理,將消息推送到客戶端。