3

100 件のレコードを取得し、それらをページに表示するとします。ユーザーは、ページ上の 2 つのレコードのみを更新します。ここで、2 つのレコードのみを更新し、他の 98 レコードは更新しないようにします。

ページに1つの送信を行い、どの2つが更新されているかをどうにかして知ってから、それら2つだけをデータベースに送信して更新するのが最善ですか?

「なんとなく」ってどんな感じ?

または、各行に update-submit ボタンを用意して、関連付けられているレコードのみを更新するようにしますか?

4

5 に答える 5

1

もちろん、これを行うにはさまざまな方法があります。一般に、Javascriptを使用して変更されたレコードのみのPOSTデータをアセンブルすることで、トラブルやサーバー側の処理を節約できます。これがどのように機能するかについての2つの考え:

1)ajaxルートに移動し、ライブ編集を行います。そのため、レコードはテーブルに表示され、編集できないように見えます。ユーザーが特定の行をクリックすると、Javascriptを使用してその行を編集可能にし、適切なhtmlフォームをその場で作成します。次に、送信ボタンまたは他のハンドラー(たとえば、フォーカスを別のテーブル行に移動する)のいずれかを使用して、DBを更新するPOSTをトリガーします(優先するajaxメソッドを介して非同期に)。幸いなことに、主流のJavascriptフレームワークは、この分野で大いに役立ちます。

2)チェックボックス-行が編集されるたびに、そのチェックボックスがオンになります。送信ボタンがクリックされたら、javascriptを使用して、チェックボックスがオンになっている行のすべてを取得してPOSTデータを投稿します。ユーザーは、送信する前にその行への変更をキャンセルするためにチェックボックスをオフにすることができます。

于 2009-03-06T22:02:24.550 に答える
0

jQueryまたはその他のJavaScriptライブラリを使用してAjaxし、各行にボタンを配置して更新します。

于 2009-03-06T21:58:54.187 に答える
0

この質問には多くの答えがあり、ある程度は開発ツールとサイトの「感触」に依存します。

行ごとに更新を行うためにAjax呼び出しを実装している場合、これは論理的には行ごとにボタンがあり、行が変更されたときにAjax呼び出しで更新するのが正しいように見えます。

これは、切断されたデータセットが解決するように設計されており、ADO.netがこれらを非常にうまく処理するというシナリオでもあります。

相変わらず、答えは「状況次第!」です。

于 2009-03-06T21:59:32.950 に答える
0

JavaScriptを使用して、ユーザーが入力フィールドを変更したときに各フィールドを変更済みとしてマークできます。更新する行のIDとダーティフラグを持つ非表示フィールドを作成します。(is_dirty_ $ idなど)JavaScriptで、非表示フィールドをダーティとして設定するonChangeハンドラーを作成します。入力が変更されたとき。

または、表示する実際のフィールドごとに非表示フィールドを作成することもできます。非表示フィールドには初期値が含まれます。サーバー側の各フィールドをチェックして、何が変更されたかを判別します。

おそらく、last_modifiedの日付を各レコードの非表示フィールドとして保存する必要があります。このように、別のユーザーが同じレコードを更新した場合、「このレコードは別のユーザーによって更新されました」などのエラーメッセージを表示できます。

于 2009-03-06T22:01:38.750 に答える
-1

1つの送信ボタン。私は複数を使用する可能性がある場合を予測できましたが、一般的な場合は1つだけです。(これは私にはWebページの質問のように見えるので、その仮定で答えていることに注意してください。)

追跡の変更を処理できる3つの方法が思い浮かびます。

JavaScript:非表示フィールドを更新するコントロールにonChange()関数を配置します。そのhiddenに値がある場合は、関連するレコードを更新します。ブラウザにJSが必要であり、更新するフィールドは通知されず、レコードのみが通知されます。

多くのフォームフィールド:各コントロールで非表示のフィールドを配置し、戻ってきたときにすべてを比較します。これは醜いですが、(レコードだけでなく)更新するフィールドを知ることができます。また、誰かが開始した変更を元に戻したかどうかを知ることもできます。

セッション:元の値をセッション変数に配置し、値が戻ってきたときに比較を行うことができます。これは、多くの非表示フィールドよりも少しエレガントであり、投稿されたデータで遊んでいる人々にはあまり開かれていません(非表示フィールドであっても、戻ってくるものを信頼してはいけないため)。ブラウザにCookieが必要であり、サーバーテクノロジにセッションが必要です。

于 2009-03-06T21:58:28.600 に答える