問題タブ [tempdata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - MVC マルチページ フォームがセッションを失う
見込み客の収集に使用する複数ページのフォームがあります。キャンペーンと呼ばれる同じフォームの複数のバージョンがあります。3 ページ形式のキャンペーンもあれば、2 ページ形式のキャンペーンもあれば、1 ページ形式のキャンペーンもあります。それらはすべて同じリード モデルとキャンペーン コントローラーなどを共有します。キャンペーンのフローを制御するための 1 つのアクションと、すべてのリード情報をデータベースに送信するための別のアクションがあります。
これをローカルで再現することはできず、ユーザーがページをスキップできないようにするためのチェックが行われています。セッション モードは InProc です。
これは、セッションに値を保存するすべての POST アクションの後に実行されます。
これは、コントローラー内の Lead プロパティです。
ParentStore クラス:
キャンペーン POST アクション:
問題は、上記のアクションの間、および次の送信アクションが実行される前に発生しています:
私たちのサイトへのすべての訪問者は、一意の GUID の訪問者 ID を取得します。しかし、これらのエラーが発生すると、Campaign POST と Submit POST の間で訪問者 ID が異なります。キャンペーンおよび送信アクション中に TrackLead() メソッドを介して各フォーム送信を追跡するため、すべての POST 後に OnActionExecuted が起動し、フォームをセッションに保存しているにもかかわらず、呼び出し間でセッションが失われていることがわかります。
したがって、エラーが発生すると、フォームの半分が 1 つの visitorID で取得され、フォームの残りが別の VisitorID で取得されます。幸いなことに、独自の ID を使用するフォーム値が変更されるたびに API 呼び出しを送信するサード パーティ サービスを使用しています。これらの ID は、フォームの前半と残りのフォームの間で一貫しており、セッションの損失の問題からリードを救う唯一の方法です。
また、これは 99% の確率で正常に機能することにも注意してください。
編集: リード オブジェクトを TempData に明示的に格納するようにコードを変更し、TempData.Keep() メソッドを使用して後続のリクエスト間でオブジェクトを永続化しました。この動作を 3 つのサイトのうちの 1 つにしか展開していませんが、これまでのところ問題ありません。
私はまた、コントローラーのアクションで直接セッションにリードオブジェクトを保存しようとしました。つまり、
HTTPSessionStateBase を使用し、HTTPSessionState を使用する HttpContext.Current.Session の代わりに、ラッパー クラスを回避しようとします。予想どおり、この変更は問題に違いをもたらしませんでした。
編集 #2: 今朝メールをチェックすると、リード モデルを TempData に保存したにもかかわらず、2 つのセッション エラーに気付きました。何かが原因でセッションがクリアされています。おそらく何らかのアプリケーション プールのリサイクルが原因ですが、まだ特定できていません。私はおそらくSQL Serverにセッションを保存し始めるつもりです...
リクエストによる SessionStore.cs コード:
asp.net - nodejs で ASP.NET TempData をシミュレートする
nodejsでTempDataのようなオブジェクトを作成するにはどうすればよいですか? 'IsTempData' フラグをセッションに設定し、アプリケーションの最後に、このフラグが選択されているセッションをクリアできるのではないかと考えました。しかし、問題があります。tempdata を使用する非同期関数が多数あるため、tempdata を使用する前にアプリケーションが終了する可能性があります。アプリケーションを終了することで私が意味することを理解していただければ幸いです。
asp.net-mvc - TempData + Windows 認証 = タイムアウトなし。出来ますか?
私の MVC アプリケーションは Windows 認証で実行されています。
アプリケーションのさまざまな場所で TempData を使用しました。問題は、セッションのタイムアウトで明らかになることです。ただし、Windows ログインはまだ実行中です。ユーザーがWindowsログインからログオフするまで、それらをそのままにしておくにはどうすればよいですか..つまり、タイムアウト自体があってはなりません。出来ますか?
asp.net-mvc-3 - MVCCRGパターンがSessionStateと競合しています
私はMVC3Webアプリを持っています。その中で私はPRG(Post-Redirect-Get)パターンを使用してきました。これは、モデルの検証が失敗した場合のポストバック中に、ViewDataをTempDataに永続化してから、元のGETアクションにリダイレクトします。
アクション後-
後のGETアクション-
これはほとんど通常の方法です。これまで、すべてが正常に機能しています。ここで、セッションの永続性を改善する必要があります。つまり、「より長い」セッションが必要です。ASP.NetStateServerを使用すると結論付けました。
セッションをStateServerに移行した後-
カスタムオブジェクトを保存している一部のセッションで「シリアル化できません」というエラーが発生し始めました。問題を整理するようなオブジェクト[Serializable]を作成しました。しかし今、私は上記のPRGパターンで立ち往生しています!
エラー-アセンブリ'System.Web.Mvc、Version = 3.0.0.0、Culture = neutral、PublicKeyToken=31bf3856ad364e35'に「System.Web.Mvc.ViewDataDictionary」と入力してもシリアル化可能としてマークされていません。
奇妙なことに、私のシナリオを共有する単一のスレッドを見つけることができません。誰?
asp.net-mvc - asp.net mvc - ビューで使用できない tempdata 値
TempData
コントローラーでは、次のようにコントローラーに値を設定しています。
ビューでそれらを使用しようとすると、常に null であることがわかります。デバッガーを使用して、それらが設定されていることを確認し、ビューでそれらが null であることを確認できます。私は当惑しています。
コントローラー アクションは実際には子アクションであり、View はPartialView()
親コントローラーでの呼び出しを介してレンダリングされます。リダイレクトは行われません。誰が問題が何であるかを提案できますか?
c# - ベースコントローラから戻った後のTempDatanull
TempDataはBaseメソッドに入力されますが、コードが派生コントローラーのメソッドに戻るとすぐにnullに変わります。
派生コントローラー編集アクション(投稿):
ベースコントローラーの編集アクション:
asp.net-mvc - 複数のステップのデータを保持しますか?
私には3つのステップがあり、各ステップが表示されています。ステップ1で開始日時を尋ね(タイムゾーンと時刻を選択できます)、UTCとして保存します。ステップ3で、選択したタイムゾーンに基づいて、選択したタイムゾーンを知らずに日付/時刻を表示します(ユーザーはコンピューターのタイムゾーンに基づいて表示されるため、保存しないでください)。
これを行うための最良の方法を知りたいです。一時データを保存してから復元することを考えていました。ベストプラクティスのようには思えませんが。
asp.net-mvc - SessionTempDataProvider と CookieTempDataProvider の動作の違い
これのすべての短いバージョンは、TempData を使用してフィードバック メッセージを保存し、CookieTempDataProvider の使用に切り替えた後、PRG パターンを使用すると表示されませんが、SessionTempDataProvider に戻すと表示されます。
私の MVC4 アプリケーションでは、作成/更新が成功した後、または特定のページで問題が発生し、失敗メッセージを表示する必要がある場合に、画面に表示するために一時データにアラート メッセージを書き込むパターンがあります。例えば...
_Layout.cshtml ファイルによって呼び出される部分ビューがあります。これは基本的に、フィードバック メッセージで満たされるプレースホルダー DIV 要素 (およびいくつかの js) であり、これは正常に機能します。
現在、これはデフォルトで機能しますが、TempData はセッションに依存しているため、可能であれば無効にし、TempDataProvider の別の実装を使用して、セッションがないことを回避したいと考えています。TempData の実装を変更せずにセッションを無効にすると、初めて使用しようとすると InvalidOperationException という状態になるため、別の TempDataProvier を使用する必要があります。
SessionStateTempDataProvider クラスでは、セッション状態を有効にする必要があります。
Dependency Injector である StructureMap を使用して新しいコンポーネントを登録したところ、次のようになりました。
CookieTempDataProvider の私の実装はここからのものであることに言及する必要があります
どうやらそれは削除されました。
これで、TempData を使用しようとすると例外が解決されますが、フィードバックが表示されません。私は自分の努力で何かを壊したのではないかと思ったので、DI 行をコメントアウトし、セッション状態モードを に戻しInProc
、テストしました。私のフィードバックは期待どおりに表示されます (IISExpress を再起動した後)。注入行のコメントを外し、セッション状態を に変更するOff
と、フィードバックなしに戻ります。
さらにテストを行ったところ、アクションで次のことを行ってもメッセージが表示されないことがわかりました
しかし、PRG パターンを無視してこれを行うと、フィードバックが表示されます。
私の質問は、一般的に受け入れられている CookieTempDataProvider に欠陥があるのでしょうか、それとも何か間違っているのでしょうか?
asp.net-mvc - TempData はどこに保存されますか?
TempData は ASP.NET MVC フレームワーク (具体的には ASP.NET MVC 2) のどこに格納されますか? サーバー側に保存されますか、それともクライアントに送信されますか?
asp.net-mvc - Redirect() の使用時に情報をビューに戻す
複数のページからコントローラーを呼び出しており、returnUrl
パラメーターを使用して正しい呼び出し場所を返しています。
を使用するときに追加情報をビューに戻すにはどうすればよいRedirect(url)
ですか? message
上記の例では、 に値がある場合に戻せるようにしたいと考えreturnUrl
ています。