ビュー内からセッションデータにアクセスしようとしています。
ユースケース:ページの上部に表示されるセッションにステータスメッセージを保存しています。現在、いくつかの_ViewData[....]
_プロパティを設定するDisplayMessages()
関数を使用し、すべてのコントローラーアクションの開始時に呼び出すことで、これを実装しました。
目標:次のページの読み込み時にメッセージを表示するためにコントローラーに追加のコードを必要とせずに、ステータスメッセージを1回だけ設定したい。
そのため、セッションに保存されているメッセージにビューから直接アクセスしようとしています。
これまで私は以下を試しました:
next()
からnext.invoke()
への変更を含むHttpContext
にアクセスでき、_Session.IsAvailable
_はtrueでしたが、セッションにデータがありませんでした。ビューでは次のように機能するはずです。Context.Session.TryGetValue
SessionExtensions
を使用している場合は、Context.Session.GetString
働くでしょう。
IHttpContextAccessor
の挿入は機能しますが、ASP.NET Core 1.0.0 RC2以降、IHttpContextAcessor
は、要求ごとにかなりのパフォーマンスオーバーヘッドがあるため、デフォルトでは登録されません。詳細については、 このGitHubの発表 を参照してください。
トラッチャーの投稿:
IHttpContextAccessorを使用して、現在のスレッドのHttpContextにアクセスできます。ただし、この状態を維持することには重要なパフォーマンスコストがかかるため、デフォルトのサービスセットから削除されました。
これに依存する開発者は、必要に応じて追加し直すことができます:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
ただし、ユースケースでは、ViewComponent
を使用することをお勧めします。これは、コントローラーに依存しない、ロジックを備えた再利用可能なビューです。
ドキュメントは見つけることができます ここ 。
あなたのビューにあなたは単にそれを埋め込むでしょう
@await Component.InvokeAsync("PriorityList", new { maxPriority = 2, isDone = false })
または
@Component.Invoke("PriorityList", new { maxPriority = 2, isDone = false })
同期呼び出しの場合。