2009-03-22 10 views
2

たとえば、language_idという変数をセッションに格納したいとします。ASP.NET MVCでセッションデータを処理する方法

public class CountryController : Controller 
{ 
    [WebMethod(EnableSession = true)] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResultChangelangue(FormCollection form) 
    { 
     Session["current_language"] = form["languageid"]; 
     return View();  
    } 
} 

しかし、セッションをチェックすると常にnullになります。どうして? ASP.NET MVCでのセッション処理に関する情報はどこで入手できますか?

+0

のみASP.NET Webサービスのための[WebMethod属性]はありませんか? – bzlm

+0

値を設定するコードだけを表示するので、セッションから変数にアクセスするコードを表示できますか?また、あなたの質問の始めには 'language_id'という変数を参照していますが、セッションを設定するコードは' languageid'変数(アンダースコアなし)を参照しています。 –

答えて

1

これは動作するはずですが、推奨される方法ではありません。 IISまたはASP.NETでセッション状態がオフになっている可能性がありますか? this answer and its commentsを参照してください。

12

コントローラを保つための方法として、厳密に質問自体に関連し、より多くない(合理的)を強く型付けされた、きれいなあなたがするように、私はまた、それに任意のセッション情報をラップしたクラスのようなセッションファサードをお勧めしますそれを素敵な方法で読み書きしてください。

例:

public static class SessionFacade 
{ 
    public static string CurrentLanguage 
    { 
    get 
    { 
     //Simply returns, but you could check for a null 
     //and initialise it with a default value accordingly... 
     return HttpContext.Current.Session["current_language"].ToString(); 
    } 
    set 
    { 
     HttpContext.Current.Session["current_language"] = value; 
    } 
    } 
} 

用途:

public ActionResultChangelangue(FormCollection form) 
{ 
    SessionFacade.CurrentLanguage = form["languageid"]; 
    return View(); 
}