Domanda

Problemi un po 'pelosi durante l'invio di dati tramite una chiamata ajax jquery. Fondamentalmente, i valori del modulo dei campi del modulo che sono stati aggiunti in modo dinamico allo schermo in una griglia tubolare usando jquery non si aggiornano su un comando di salvataggio batch.

Fondamentalmente ho un elenco a griglia che mostra tutte le righe correnti salvate nel database con ogni colonna contenente campi modulo. Ho quindi un modulo nella parte superiore della pagina, che è il tipico modulo di dettaglio aggiungi un altro . Digiti i tuoi valori, premi & Quot; aggiungi & Quot; questo viene salvato nel database tramite una chiamata jacquery json ajax e i dati del modulo vengono aggiunti e riflessi in una nuova riga nella tabella degli elenchi. (questa parte funziona)

Il mio problema si trova quando si desidera modificare i valori del modulo nella riga della tabella jquery appena aggiunta . Quando viene premuto il pulsante Salva, verrà salvata di nuovo solo una delle righe della tabella già create. I dati del modulo di riga dinamica non vengono non salvati. La chiamata di aggiornamento utilizza jquery ajax e il binding del modello ASP.NET MVC. Nel & Quot; aggiungi & Quot; Sto restituendo un asp.net mvc & Quot; vista parziale & Quot; alla mia risposta ajax jquery e viene aggiunto a una tabella di elenco della griglia usando $("#tablename tr:last").after(result).

Ciò che ho già dedotto è, come detto, la nuova riga aggiunta dinamicamente non si aggiorna. Ho un IList<Item> set restituito nel mio elenco di associazione del modello MVC al mio metodo di azione del controller che contiene l'intero elenco di articoli, meno le righe del campo modulo aggiunto jquery appena create. Questo è il problema e perché quando si esegue un aggiornamento della pagina, le righe tornano ai valori del modulo originale inseriti al momento dell'aggiunta iniziale.

Qualche idea sul perché i miei <=> non includano queste righe aggiunte dinamicamente? Ispezionando in Firebug usano lo stesso convento dei nomi nel loro attributo name e tutto dovrebbe andare bene.

Graham.

Aggiornamento 1 maggio 11:00 GMT + 10: ricevo i valori quando cambio il Model Binding da IList a FormCollection. Non voglio usare FormCollection piuttosto che il binding del modello, ma si pone la domanda se posso ottenerlo correttamente tramite FormCol, perché non il legante del modello IList? Ho confrontato la voce dell'array con un articolo funzionante e tutti soddisfano gli stessi criteri e valori.

È stato utile?

Soluzione

Non sono un programmatore ASP, ma faccio un sacco di lavoro jquery. Se capisco correttamente il tuo problema, le tue righe generate dinamicamente non sono legate alle funzioni di callback che eseguiranno le tue operazioni di aggiornamento.

Puoi associare gli elementi generati dinamicamente a un callback usando la funzione 'live' di jQuery (come Wikidkaka stava cercando di dirti) oppure puoi legare manualmente gli elementi appena creati nella funzione di callback che viene attivata quando l'ajax ritorna la chiamata.

Consiglio di usare la funzione live nativa che è stata aggiunta (credo) all'ultima versione di jQuery. Ti eviterà di dover scrivere righe aggiuntive per associare manualmente i callback e semplificare la manutenzione del codice.

Quindi cambia:

$('div.your-save-buttons').click(updateFunction);

a

$('div.your-save-buttons').live(updateFunction);

Altri suggerimenti

Usa il plug-in livequery per quello che stai cercando di fare. Puoi trovarlo qui - http://docs.jquery.com/Plugins/livequery

Questo non funziona con la maggior parte degli elementi aggiunti dinamicamente:

$("select something").onSomeEvent("do something");

Ma con il plug-in livequery puoi farlo funzionare cambiando il tuo codice JS in qualcosa di simile al seguente:

$("select something").livequery('event name','do something');

Se la proprietà sul modello è un elenco di numeri interi, è possibile utilizzare IEnumerable<int> per ottenere l'associazione automatica del modello. Funziona sia per un metodo di azione il cui parametro è <=> sia per un metodo di azione il cui parametro è un modello che ha una proprietà che è <=>. Ad esempio, in questo modo:

<%= Html.Hidden("myField", 1) %>
<%= Html.Hidden("myField", 1) %>

e

public ActionResult Update(IEnumerable<int> myField) { }

o

public ActionResult Update(MyModel myModel) { }
public class MyModel {
    public IEnumerable<int> myField { get; set; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top