2012-01-30 16 views
0

私のクラスがコントローラまたはヘルパーから継承されていなくても、セッションにデータを書き込み、読み込みたいと思います。このような何か:コントローラまたはヘルパーから継承されないクラスのMVC3での設定

public class User 
{ 

     public void CreateSession() 
     { 
      Session["key"]=data; 

     } 

     public void ReadSession() 
     { 
      data=(string)Session["key"]; 
     } 


} 

重要なこと - 私はいくつかのアクション とビューにUserクラスのインスタンスを取得する必要があり。コントローラーからUserクラスを継承することができますか、または ヘルパーから継承できますか?私はすでにそれを試してきたので、私はいくつかのエラーがあります。

どうすればこの問題を解決できますか? ありがとうございます。

+0

なぜビューでアクセスする必要がありますか? ViewBag経由でビューに渡してください。 –

+0

私はauthorazionコントロールのためにそのクラスを使用しているので、Userクラスインスタンスのマスターページで、私は名前、IDなどのデータを取得します。 – serhads

+0

あなたは認証制御のためにセッションを使用すべきではありません。 IPrincipalベースのものを使用する必要があります。それ以外の場合は、セッション盗難の脆弱性があります。 –

答えて

1

HttpContext.Sessionは動作しますが、System.Webを参照するアセンブリのどこでも静的です。

コードがメインのWebサイトのアセンブリにある場合は、これがうまくいくはずです。そうでない場合は、System.Webへの依存関係を作成しなければならない場合があります。

+0

ありがとう、私はセッションHttpContext.SesionとSystem.Web.HttpContext.Sesionを呼び出そうとしましたが、両方の値を再取得します。私は何か間違っているのですか? – serhads

+0

実際にコントローラ外のHttpContext.Current.Sessionにアクセスすると(たとえば、global.asax.cs内で)、nullであることがわかります。 – hardywang

1

コントローラでは、このような作業を行う必要があります。

HttpContextに直接アクセスすることはできますが、これは「ASP.NET MVCの方法」ではなく、最初はMVCを使用する利点の一部を失います。テストを難しくし、アプリケーションを直接HttpContextに結合するように...

また、何かの理由で新しいセッションまたはSession ["key"]が設定されていない場合、data=(string)Session["key"];はnull参照例外をスローします。

+0

はいそれは私の問題であるnullを返します。 – serhads

関連する問題