我有一個關於使用會話,或者可能TempData存儲數據,同時在一個頁面上工作的問題。我使用多個Ajax請求存儲和檢索數據,並保存到我的控制器Action上的會話。我想要做的是,當用戶離開我的頁面時,我想清除會話變量。我將如何與會議做到這一點?或者也許有某種其他方式來存儲數據只有一個http請求(我不知道這一點,因爲我說我有多個POST以及頁面內的GET請求。)保持會話中的數據,直到用戶離開頁面
任何幫助將讚賞。由於
我有一個關於使用會話,或者可能TempData存儲數據,同時在一個頁面上工作的問題。我使用多個Ajax請求存儲和檢索數據,並保存到我的控制器Action上的會話。我想要做的是,當用戶離開我的頁面時,我想清除會話變量。我將如何與會議做到這一點?或者也許有某種其他方式來存儲數據只有一個http請求(我不知道這一點,因爲我說我有多個POST以及頁面內的GET請求。)保持會話中的數據,直到用戶離開頁面
任何幫助將讚賞。由於
你不要你使用Hiddenfields
在你的HTML來保存數據...
同Asp.Net使用hiddenfield存儲視圖狀態數據.....
取決於你的意圖。
如果您想要使用Ajax請求執行異步事件,您可以將數據存儲在隱藏字段或您的.success事件中的jQuery .data()中。然後,當一切都完成後,使用jQuery來填充你需要完成的工作。
如果您想要一個真正的會話變量(跨多個頁面),那麼最好的方法是在window.close上清除會話。儘管這僅限於啓用了JavaScript的用戶。我不認爲有這樣一個萬無一失的方法。
使用Html.HiddenFor(myModel => myModel.SomeField)來執行此操作。您可以將值分配給它,然後它會自動將值返回到您的模型中,這是超方便的。
我希望這有幫助!
如果你真的想使用TempData的(我有時做),我有一個看起來像這樣一個KeepTempDataAlive(字符串tempKey)方法...
if(TempData[tempKey] != null)
{
TempData.Keep(tempKey);
}
這應該保持它周圍1更多回帖。只要你需要,就做這個。
我解決了這個問題,利用jQuery和頁面卸載時運行的ajax請求。
在你的JavaScript:
$(window).unload(function() {
$.ajax({
url: applicationPath + "/api/ExampleApiController/ExampleWebMethod",
async: false,
type: 'GET',
data: {
"someVariable": anythingYouWantToPassIfAny,
"otherVariable": anythingElseYouWantToPass,
}
});
});
注意:您需要設置異步:假,否則頁面將卸載它有機會運行Ajax請求之前。對於該類型,您可以使用GET或POST,無論您的偏好是什麼以及您希望對請求做什麼。
public class ExampleApiController
{
[HttpGet]
public void ExampleWebMethod(string someVariable, string otherVariable)
{
HttpContext.Current.Session.Remove("sessionVariableA");
HttpContext.Current.Session.Remove("sessionVariableB");
...
}
}
您還可以添加代碼來檢查返回,如果你想看看它是否是成功還是失敗,但對我來說我只是想盡快的東西來運行:
在您的API控制器然後並不是真的想要它返回任何東西,如果它失敗了,這不是什麼大問題,所以我只是發送請求並卸載。我知道這個問題很老,但希望它能幫助別人。
注意:此解決方案的問題是,如果用戶刷新頁面,它仍將調用卸載事件並刪除所有會話變量。