Domanda

Supponi di aver recuperato 100 record e di visualizzarli su una pagina. L'utente aggiorna solo 2 dei record nella pagina. Ora vuoi aggiornare solo i due record e non l'altro 98.

È meglio avere un invio sulla pagina, quindi in qualche modo sapere quali 2 vengono aggiornati, quindi inviare solo quei due al database per un aggiornamento?

Cosa significa "in qualche modo" assomigliare?

Oppure, avresti un pulsante di invio aggiornamento per ogni riga e aggiorneresti solo il record a cui è legato?

È stato utile?

Soluzione

Ovviamente ci sono diversi modi per farlo. In generale, è possibile salvare alcuni problemi e l'elaborazione sul lato server utilizzando Javascript per assemblare i dati POST solo per i record che sono stati modificati. Due pensieri su come potrebbe funzionare:

1) Segui il percorso Ajax e modifica live . Quindi i record sono presentati in una tabella e sembrano non modificabili. Quando un utente fa clic su una determinata riga, quella riga diventa modificabile utilizzando Javascript per creare al volo il modulo html appropriato. Quindi avere un pulsante di invio o un altro gestore (ad esempio, spostare lo stato attivo su un'altra riga della tabella) che attiverà il POST che aggiorna il DB (in modo asincrono tramite il metodo ajax preferito). Fortunatamente i framework Javascript tradizionali possono essere di grande aiuto in questo settore.

2) Caselle di controllo: ogni volta che una riga viene modificata, la sua casella di controllo viene selezionata. Quando si fa clic sul pulsante di invio, utilizzare JavaScript per pubblicare i dati POST afferrando tutto nella riga la cui casella di controllo è selezionata. Un utente può deselezionare una casella per annullare le modifiche a quella riga prima di inviare.

Altri suggerimenti

Ajax usando jQuery o qualche altra libreria JavaScript e metti e aggiorna il pulsante su ogni riga.

Esistono molte risposte a questa domanda e in parte dipendono dai tuoi strumenti di sviluppo e dal "sentire" del sito.

Se stavi implementando chiamate Ajax per fare gli aggiornamenti riga per riga, questo sembrerebbe logicamente giusto avere un pulsante per linea e quindi aggiornarlo con una chiamata Ajax quando viene cambiata una linea.

Questo è anche lo scenario in cui i set di dati disconnessi sono stati progettati per risolvere e ADO.net li gestisce molto bene.

Quindi, come sempre, la risposta è " Dipende! "

Puoi utilizzare JavaScript per contrassegnare ogni campo come modificato quando un utente modifica un campo di input. Crea un campo nascosto con l'id della riga che stai aggiornando e il flag sporco. (come is_dirty_ $ id) In JavaScript, crea un gestore onChange che imposta il campo nascosto su sporco. quando qualsiasi input viene modificato.

In alternativa, puoi creare campi nascosti per ogni campo reale che visualizzi. il campo nascosto conterrebbe i valori iniziali. controlla ogni campo sul lato server per determinare cosa è cambiato.

Probabilmente desideri memorizzare una data ultima_modificata come campo nascosto per ogni record. In questo modo se un altro utente aggiorna lo stesso record, puoi visualizzare un messaggio di errore che dice "questo record è stato aggiornato da un altro utente" o simile.

Un pulsante di invio. Potrei prevedere il caso che potrei usare più di uno, ma nel caso generale solo uno. (Nota, questa mi sembra una domanda da una pagina web, quindi sto rispondendo con questa ipotesi.)

Ci sono 3 modi che vengono in mente per gestire le modifiche al tracciamento:

JavaScript: inserisci una funzione onChange () sui controlli che aggiornano un campo nascosto. Se quello nascosto ha un valore, aggiorna il record associato. Richiede JS sul browser e non ti dice quali campi aggiornare, ma solo quali record.

Molti campi modulo: metti un campo nascosto con ogni controllo e confrontali tutti quando ritornano. Sarebbe brutto, ma ti permetterebbe di sapere quali campi aggiornare (non solo il record). Ti consentirebbe anche di sapere se qualcuno ha annullato una modifica avviata.

Sessioni: è possibile posizionare i valori originali nelle variabili di sessione, quindi eseguire il confronto quando i valori ritornano. Questo sarebbe un po 'più elegante di un sacco di campi nascosti, e meno aperto alle persone che giocano con i dati di post pubblicati (dal momento che non dovresti mai fidarti di tutto ciò che ritorna, anche nei campi nascosti). Richiede cookie sul browser e sessioni sulla tecnologia server.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top