2014-01-16 46 views
1

我想弄清楚如何在我的視圖加載並呈現給用戶時在我的控制器中調用方法。我試過覆蓋了OnResultExecutedOnActionExecuted,但這似乎並沒有成功。視圖加載後,是否可以在控制器中調用動作?

protected override void OnResultExecuted(ResultExecutedContext filterContext) 
{ 
    ConnectToDataSources(); 
    base.OnResultExecuted(filterContext); 
} 

ConnectToDataSources方法設置使用的SqlDependency觸發實時更新在遠程服務器上連接一個WCF服務。客戶端我使用SignalR在每次更改時更新視圖。如果沒有數據的「實時流」,服務將返回數據庫中的最後一個值。我的問題是,它似乎發生得太快,所以我的價值觀沒有正確設置。

如果我嘗試一些愚蠢的做法與延遲一秒鐘的計時器,值顯示。然而,這不是一個穩定的解決方案,就像我說的,我試圖找出在觸發ConnectToDataSources方法之前如何等待視圖完全加載。

public void ConnectToDataSources() 
{ 
    foreach (UnitDetailsModel unit in Model.UnitDetails) 
    { 
     var ods = new OperationDataSource(); 
     var ads = new ActivityStatusDataSource(); 

     ads.Start(unit.UnitId, ActivityReceived, AliveReceived); 
     ods.Start(DataReceived, unit.UnitId); 
     _dataSources.Add(ods); 
     _activityStatusDataSources.Add(ads); 
    } 
} 
+1

我會做客戶端(服務器沒有關於渲染事物的知識)。當文檔準備就緒時,只需啓動一個AJAX請求(如果不需要,就忽略結果)。 –

回答

5

Server沒有有關呈現的東西,那麼我建議從客戶端,做時,文件已經準備好知識,用AJAX請求:

$(document).ready(function { 
    $.ajax({ 
     type: 'GET', 
     url: '/Controller/Method', // Update with proper URL 
     cache: false, 
     success: function(result) { 
      // You may skip this if you don't expect any result 
     } 
    }); 
}); 

現在,讓我們使它更通用與服務器端生成的URL代替硬編碼的URL:

url: '@Url.Action("MethodName", "ControllerName")', 

當然,你甚至可以通過一些數據(data場在AJAX請求中)。如果您不需要任何返回值,只需將您的操作方法聲明爲void(如果您不需要任何客戶端檢查以確保操作成功,則可選地省略success函數)。

+0

我可以像ConnectoToDataSources一樣調用void方法嗎?我不需要返回任何東西,因爲我只是建立了一些連接。 –

+0

@NicklasWinger是的,只是將其聲明爲void(實際上它將返回EmptyResult)。 –

+0

啊。花了我一些時間弄清楚,但我(當然)必須從視圖運行語句而不是js文件(由於剃刀語法)以及向我的方法添加[HttpGet]。現在,接下來的問題;當調用ConnectToDataSources時,我的模型爲空。 –

相關問題