ユーザーのセッション全体に対するオブジェクトへの参照を維持することを望んでいるのか、単一の要求に対してのみオブジェクトを参照したいのかわかりません。いずれかの方法で、あなたは、コントローラとビューを使用するためのスコープにオブジェクトを取得するためのGlobal.asaxを使用することができます。
は、次にコントローラにそうように、これをアクセスすることができます。
public ViewResult ThisAction()
{
var myObject = HttpContext.Current.Items["MyObjectKey"] as MyObjectType;
// placing this in view data provides easy access in the view.
ViewData["MyObject"] = myObject;
return View();
}
が次にビューにあなたはViewDataを、またはdirectlからこれをアクセスすることができますHttpContext
<% var myObject = ViewData["MyObject"] as MyObjectType; %>
<!-- If for some reason you don't want it in view data
you can use the HttpContext directly instead -->
<% var myObject = HttpContext.Current.Items["MyObjectKey"] as MyObjectType; %>
セカンドからyは、セッションオブジェクトをスコープ:
このメソッドは、ユーザーのセッションが終了するまでのスコープ内のオブジェクトを維持します。
Global.asax.cs
protected void Session_Start(object sender, EventArgs e)
{
var myObject = SomeMethodThatGetsMyObject();
Session["MyObjectKey"] = myObject;
}
protected void Session_End(object sender, EventArgs e)
{
Session.Remove("MyObjectKey");
}
は、次にコントローラにそうように、これをアクセスすることができます。
public ViewResult ThisAction()
{
var myObject = Session["MyObjectKey"] as MyObjectType;
// placing this in view data provides easy access in the view.
ViewData["MyObject"] = myObject;
return View();
}
を次にビューで、あなたはViewDataをから、または直接のHttpContext
からこれをアクセスすることができます <% var myObject = ViewData["MyObject"] as MyObjectType; %>
<!-- If for some reason you don't want it in view data
you can use the Session directly instead -->
<% var myObject = Session["MyObjectKey"] as MyObjectType; %>
ベストプラクティス
このデザインを少し改善するためにいくつかのベストプラクティスを適用することができます。 1つは、ビュー内のオブジェクト全体を渡して使用する代わりに、必要な値をビューデータに渡して、ビューに代入コードとキャストコードを保持させない方がよい場合があります。
また、常に利用可能なユーザースコープのオブジェクトを作成したいという欲求がある場合は、「キャストすることができますか?ちょうど "の場合は、少しの反パターンです。このオブジェクトの目的が何であるかを知ることは有益なので、既知のベストプラクティスに従って問題を解決するのに役立つパターンが示唆される可能性があります。
これのどこかで私が少し助けてくれることを願っています。
私は、これはあなたが意味を正確に何であるかどうかわからないんだけど、この種のものはSessionFacadeです。ここの例:http://www.codeproject.com/KB/aspnet/session_facade.aspx –