0

これは基本的な質問かもしれません...しかし、私はそれをあまり与えずに解決策を選んでいます...

フォームのグリッドがあるページを考えてみましょう。/FormList.aspx

フォームの編集を選択すると、ユーザーは次のようなページにリダイレクトされます。/FormEdit.aspx?Id=2

Idが有効であることをFormEditのコードビハインドでチェックインするため、通常はクエリ文字列で値を渡しても問題ありません。ただし、値を渡すための最良の方法はどれですか:セッションまたはクエリ文字列?または他?

ユーザーがフォームを編集している間...私は通常、セッション中に一時的にIDを保存します(URLから再度取得しないようにするため)。ユーザーのフォームの編集中に、値を保存するための最良の方法は何ですか?セッション中ですか、それとも隠しフィールド ですか?または他?(一時的なDataTableを保存したい場合は、セッションしか使用できないと思いますが、整数値の場合は...)

よろしくお願いします:)

4

5 に答える 5

3

Sessionクエリ文字列または非表示のフォームフィールドに簡単かつ迅速に保存およびチェックできるものには使用しないことをお勧めします。ここで話しているように見える情報は、クエリ文字列に最適です。

Session誰かが異なるタブで一度に複数のフォームを編集しようとすると、バグが発生する可能性があることに注意してください。彼らが1つを保存するとき、Session取得される値は、保存するために最後にロードした値からのものになります...おそらくあなたが望むものではなく、これを理解するのは難しいでしょう。

実行する必要があるのは、クエリ文字列/フォームフィールドにformIDを保持し、保存を送信するときに正常性を再確認することです。たとえば、それが存在するIDであり、編集が許可されていることを確認してください。

于 2010-11-19T11:08:17.000 に答える
1

通常、ページ間で転送するデータが非常に小さい場合は、QueryStringが適しています。

2-セッションは、ユーザー固有のデータを保存する場合に最適です。

この場合、非常に小さなデータ(ID)を次のページに送信するため、クエリ文字列が最適です。

于 2010-11-19T11:05:42.337 に答える
1

考慮すべきいくつかの事柄:

  1. 値の操作がセキュリティリスクである場合は、サーバー側で保存するか、値のクライアント側を保護する必要があります(これは簡単に修正することはできません)。またはさらに良い:それらを再計算します。
  2. ユーザーが同時に複数のタブでWebサイトを開いている場合、セッションに保存すると問題が発生しやすくなります。また、戻るボタンを壊す可能性があります。
    たとえば、ユーザーがセッションで現在編集しているアイテムのIDを保護し、ユーザーが2つのエントリを同時に編集する場合、最初に編集を開始したアイテムのコンテンツが、後で編集を開始したエントリに書き込まれる可能性があります。
于 2010-11-19T11:06:02.303 に答える
0

私の提案は、値をセッション変数に保持することですが、FormEdit.aspxのpage_loadを初めて実行するときは、ページのViewStateに値を保存し、セッション変数をクリアします。

そのようなもの(FormEdit.aspxのpage_load内):

if (!IsPostBack)
{
    ViewState["MyVar"] = Session["MyVar"];
    Session.Remove("MyVar");
}
于 2010-11-19T20:59:00.343 に答える
0

ASP.NETとクエリ文字列の問題は、それらがポストバックで存続することです。つまり、ページのフォームアクションは、デフォルトで、ページの読み込みに使用されたクエリ文字列を含むURLになります。

問題のIDが特定のフォームを選択するためだけに使用されている(そしてユーザーデータに関連していない)場合、これは大したことではありません。実際、それはおそらくあなたが望むものです。

一方、レコードを識別する場合は、これを望まない場合があります。物事を適切にコーディングすると仮定すると、これはセキュリティリスクをもたらすことはありませんが、クエリ文字列のレコードの内部IDを公開することで、セキュリティリスクがあるという印象をユーザーに与えることができます。また、残念なことに見えます。

これを回避する方法はいくつかありますが、3.5ではプログラムでフォームアクションを変更できると思います。(以前は、JavaScriptを使用してそれを行う必要がありました。フォームアクションが公開されていても、変更することはできませんでした)。

これに対処する最善の方法は、データレコード識別子のクエリ文字列を避けることです。代わりにPOSTを使用してデータレコードをロードします。たとえば、asp:HyperLinkコントロールを使用する代わりに、asp:LinkBut​​tonコントロールを使用します。

もちろん、POSTSはソースと同じページをロードするため、フォームがリストと同じページにある必要があります。したがって、2つの別々のページを作成する代わりに、FormList.aspxFormEdit.aspxを同じページに配置するだけで、直接投稿できます。おそらく、各フォームはとにかくUserControlにあります。したがって、メインページには、表示するユーザーコントロールを選択するだけの役割があり、他のすべてはユーザーコントロールに委任され、すべてのパラメーターの受け渡しはメインページ内の投稿を通じて実行できます。これはより優れたアーキテクチャであり、すべてをきれいに保ちます。

于 2010-11-19T21:22:16.357 に答える