0

セッションを使用してあるコントローラー アクションにオブジェクトを格納し、それを別のコントローラー アクションで取得しようとしているシナリオがあります。どちらのアクションも同じビューからトリガーされ、同じコントローラーに存在します。残念ながら、2 番目のコントローラーでセッション変数を取得できません。セッション ID は同じままで、オブジェクトが最初のアクションでセッションに書き込まれたことを確認しています。ただし、最初のアクションでビューが返されると、セッション データは消えます。

これが私のコントローラーコードフローです-

public PartialviewResult DoSearch(string paramCustId)
{
//invoking a method to perform a search task. I am also passing the controller session as a parameter
//this function is called in a separate thread and the main thread does not wait for it to complete before returning the view
multiSearch(paramCustId, Session);
}
return PartialView("_partialView1");

public void multiSearch(string searchParam, HttpSessionStateBase controllerSession)
{
//code to retrieve response from backend into the variable tempSearchSet
controllerSession["searchResult"] = tempSearchSet;
//verified that tempSearchSet is stored in Session under the key "searchResult" and Session.Count is 1.
}


//Another controller action that is triggered from the same view after a certain delay to fetch the data in session
public PartialViewResult PollSearchResults()
{
var tempSearchResult = Session["searchResult"] as List<SearchResultSet>;
//This is where i do not see data in the session. I have verified that the multiSearch method is complete and has updated the data in the session.
//here Session.SessionID is the same as above, but Session.Count is 0
}

mvc で Session を処理する別の方法はありますか、それともここで基本的なものが欠けていますか? また、このキャッシュ シナリオを管理するためのより良い方法はありますか?

4

1 に答える 1

0

解決策を見つけました。Global.asax.cs の Session_Start メソッドでセッション変数を初期化する必要がありました。この1行でうまくいきました。

HttpContext.Current.Session.Add("searchResult", new List<SearchResultSet>());

初期化せずに最初のアクション メソッドでセッション変数の get と set が機能したため、この行が必要な理由はまだ不明です。将来の研究のためにそれを保持すると思います。

于 2012-07-11T18:07:38.343 に答える