2010-07-15 80 views
0

在asp.net mvc2中,我如何顯示用戶的狀態爲「在線」?asp.net mvc 2:在線用戶

因此,如果用戶在網站上積極工作,狀態將是「在線」。

如果用戶離開站點大約5分鐘,那麼它將是「5分鐘」。

如果用戶離開站點大約10分鐘,那麼它將是「10分鐘」。

等等等等。

完成此操作的最佳方法是什麼?任何代碼示例對我都很有幫助。

答覆迄今建議我使用的Ajax。如果是這樣,那麼我怎麼能夠查詢在線用戶與離線用戶。我的所有查詢都與數據庫相反。是否有可能查詢並顯示結果加入Ajax結果與數據庫查詢?

回答

2

我認爲這樣做最直接的方法是使用會話變量。你可以在你的控制器中添加一行(無論是在操作方法中,還是在構造函數中,或者甚至可能有一個操作過濾器),它們將在會話中存儲當前的日期/時間。然後,您可以使用ajax調用以特定間隔更新屏幕上的值。您可能希望以分鐘而不是秒來間隔,否則您將顯示計數器(即「1秒」,「2秒」等)。

一些快速的代碼示例:

// Somewhere in controller 
Session["LastSeen"] = DateTime.Now; 

// Now, an action that would return the amount of time since the user was last seen 
public ViewResult GetLastSeenTime() 
{ 
    return Json(new { TimeAway = Date.Time.Now.Subtract((DateTime)Session["LastSeen"]).TotalMinutes}); 
} 

// Then on your page, something like this 
$.post("/Controller/GetLastSeenTime",null,function(result) { 
    if(result.LastSeen < 5) 
     $("#Status").Text("Online"); 
    else if (result.LastSeen % 10 == 0) 
     $("#Status").Text(result.LastSeen + " minutes"); 
},"json"); 

完全沒有測試過,但是應該接近。

1

ckramer是對的。我建議花費他的解決方案讓它可以降解。

/ Now, an action that would return the amount of time since the user was last seen 
public ActionResult GetLastSeenTime() 
{ 
if (Request.IsAjax) {  
return Json(new { TimeAway = Date.Time.Now.Subtract((DateTime)Session["LastSeen"]).TotalMinutes}); 
} 
ViewData.Add("LastSeen", Date.Time.Now.Subtract((DateTime)Session["LastSeen"]).TotalMinutes})); 
return View("MyView") 
}