0

私のアプローチまたはasp.net Webフォームテクノロジーの制限である可能性がある問題があります。このソリューションの主な推進力は、ユーザーが個々のページに長時間座っていると、CAS サーバーにリダイレクトされてページ自体に戻るという単純な事実です。その結果、すべてのフォーム入力がクリアされたかのようになりますユーザーは情報を入力しませんでした (つまり、ViewState/コントロールの状態が失われました)。そうは言っても、次のような他のオプションを検討していました。

  • HTML localStorage を使用して、ページ上のすべての値の JSON 文字列を保存します。この文字列は、解析してオブジェクトにすることができ、後で必要に応じてフォームに読み込むことができます。

このソリューションにより、個々のキーと値のペア (ページ インスタンス 1 を localStorage[ID1] に、ページ インスタンス 2 を localStorage[ID2] になど) で各ページに値を格納できましたが、サーバー側にはまだ制限がありました。ユーザーが保存しているページを検証します。現在、セッションを使用して、ユーザーが表示しているフォームを維持しています。ユーザーは 1 ページのみに関連付けられています。例を続けると、セッション情報により、ユーザーは localStorage[ID1] または localStorage[ID2] の両方ではなく、どちらかに関連付けられます。これはまさに私の問題です。どのページを保存するかをクライアント側から通信する必要があります。次のオプションを検討し、次の質問を考え出しました。

  1. どのユーザーがどのページを開いているかを格納するサーバー側のオブジェクトの静的コレクションを含む静的クラス --> 問題: どのページが実際に保存されているかを伝達します。
  2. 手元にあるページ ID の暗号化されたバージョンを含む ID を使用して、保存ボタンを動的にレンダリングします。
  3. 現在編集中の値をクエリ文字列に格納する
  4. ユーザーがポストバック時に変更したい ID の値を格納する Cookie 値 --> 特に ID が新しい場合 (ユーザーが初めてフォームに入力する場合)、Cookie はどのように値を取得しますか?

私はこれを複雑にしすぎているかもしれませんが、もっと簡単な方法があることを知っています。

4

2 に答える 2

1

多くのサイトでは、ユーザーが長時間ページに留まっている場合にダイアログを表示し、セッションを維持するかどうかを尋ねることで、この問題を解決しています。ユーザーが [はい] をクリックしない場合、セッションは失われます。

もう 1 つの解決策は、しばらくページを使用しないことを知っているユーザーが、これまでの結果を保存し、後で復元して続行できるようにすることです。

技術的な解決策に進む前に、ユーザーがページに長時間留まっている理由を見つけようとします。彼らの理由が何であれ、それが正当な理由であれば、それに対応しようとするでしょう。

理由が「あなたのページをあまり気にせず、わざわざ閉じなかったから」である場合、現在のソリューションは問題なく機能します。

于 2014-12-15T23:41:34.670 に答える
0

自分の問題を終わらせたかっただけです。ページの状態を維持するために、クエリ文字列に暗号化された値を格納することで問題を解決します。そこから、ユーザーがページに入力したすべての値を、localStorage 内の文字列化された json オブジェクト内に格納します。例: id: aa のページ 1 は、[appName_pageId] の形式で localStorage 内に 1 つのキーと値のペアを持ちます。ID bb のページ 2 には、同様のキーと値のペアがあります。ユーザーが CAS サーバーにリダイレクトされ、すべての値がクリアされた状態でページに戻った場合、クエリ文字列パラメーター (aa または bb) の値に基づいて、localStorage から正しい入力を読み込むことができます。ここで覚えておくべき重要な原則は、中央制御はサーバーに属し、分散制御はクライアントで行う必要があるということです。

于 2014-12-22T12:11:41.077 に答える