Question

Supposons que vous récupériez 100 enregistrements et les affichiez sur une page. L'utilisateur ne met à jour que 2 des enregistrements de la page. Maintenant, vous souhaitez mettre à jour uniquement les deux enregistrements, et non les 98 autres.

Est-il préférable d’envoyer un sur la page, puis de savoir quels sont les deux qui ont été mis à jour, puis d’envoyer ces deux fichiers à la base de données pour une mise à jour?

Qu'est-ce que le " en quelque sorte " ressembler?

Ou avez-vous un bouton update-submit pour chaque ligne et ne le mettez à jour que l'enregistrement auquel il est lié?

Était-ce utile?

La solution

Bien sûr, vous pouvez le faire de différentes manières. En général, vous pouvez vous épargner des problèmes et des traitements côté serveur en utilisant Javascript pour assembler vos données POST uniquement pour les enregistrements modifiés. Deux réflexions sur la manière dont cela pourrait fonctionner:

1) Allez sur la route ajax et effectuez la modification live . Les enregistrements sont donc présentés dans un tableau et semblent non modifiables. Lorsqu'un utilisateur clique sur une ligne particulière, celle-ci devient modifiable à l'aide de Javascript pour créer le formulaire html approprié à la volée. Ensuite, ayez soit un bouton d'envoi, soit un autre gestionnaire (par exemple, déplaçant le focus sur une autre ligne du tableau) qui déclenchera le test POST qui met à jour le DB (de manière asynchrone via votre méthode ajax préférée). Heureusement, les principaux frameworks Javascript peuvent beaucoup aider dans ce domaine.

2) Cases à cocher - chaque fois qu'une ligne est modifiée, sa case à cocher devient cochée. Lorsque vous cliquez sur le bouton d'envoi, utilisez javascript pour publier les données POST en saisissant tout ce qui est coché dans la ligne. Un utilisateur peut désélectionner une case pour annuler les modifications apportées à cette ligne avant de l'envoyer.

Autres conseils

Ajaxez-le à l’aide de jQuery ou d’une autre bibliothèque JavaScript, puis placez un bouton de mise à jour à chaque ligne.

Les réponses à cette question sont nombreuses et dépendent dans une certaine mesure de vos outils de développement et de la fonctionnalité "feel". du site.

Si vous implémentiez des appels Ajax pour effectuer les mises à jour ligne par ligne, cela semblerait logique de disposer d’un bouton par ligne, puis de le mettre à jour avec un appel Ajax lorsqu’une ligne a été modifiée.

C’est également le scénario que les ensembles de données déconnectés ont été conçus pour être résolus et ADO.net les gère très bien.

Ainsi, comme toujours, la réponse est "Cela dépend!"

Vous pouvez utiliser JavaScript pour marquer chaque champ comme modifié lorsqu'un utilisateur modifie un champ de saisie. Créez un champ masqué avec l'id de la ligne que vous mettez à jour et un indicateur modifié. (comme is_dirty_ $ id) En JavaScript, créez un gestionnaire onChange qui définit le champ masqué sur sale. lorsqu'une entrée est modifiée.

Vous pouvez également créer des champs cachés pour chaque champ réel que vous affichez. le champ caché contiendrait les valeurs initiales. vérifiez chaque champ du côté serveur pour déterminer ce qui a changé.

Vous souhaitez probablement stocker une date last_modified en tant que champ masqué pour chaque enregistrement. Ainsi, si un autre utilisateur met à jour le même enregistrement, vous pouvez afficher un message d'erreur indiquant que cet enregistrement a été mis à jour par un autre utilisateur " ou similaire.

Un bouton d'envoi. Je pouvais prévoir que je pourrais en utiliser plus d'un, mais dans le cas général, un seul. (Notez que cela ressemble à une question de page Web, alors je réponds avec cette hypothèse.)

Il y a 3 façons qui vous viennent à l'esprit pour gérer les modifications de suivi:

JavaScript: Placez une fonction onChange () sur les contrôles qui mettent à jour un champ masqué. Si cette valeur masquée a une valeur, mettez à jour l'enregistrement associé. Requiert JS sur le navigateur et ne vous dit pas quels champs mettre à jour, mais quels enregistrements.

Beaucoup de champs de formulaire: placez un champ caché avec chaque contrôle et comparez-les tous quand ils reviennent. Ce serait moche, mais cela vous permettrait de savoir quels champs doivent être mis à jour (pas uniquement l'enregistrement). Cela vous permettrait également de savoir si quelqu'un annule un changement qui a commencé.

Sessions: vous pouvez placer les valeurs d'origine dans des variables de session, puis faire la comparaison lorsque les valeurs reviennent. Ce serait un peu plus élégant que beaucoup de champs cachés, et moins ouvert aux personnes jouant avec les données postées (car vous ne devriez jamais faire confiance à tout ce qui revient, même dans les champs cachés). Nécessite des cookies sur le navigateur et des sessions sur la technologie du serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top