Quando invio una lista di int di con jQuery come questo:Come inviare un elenco di int con jQuery per ASP.net MVC predefinito modello Binder
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
Poi jQuery sarà trasformare l'oggetto pkList e inviarlo via post come questo:
pkList[]:1
pkList[]:2
pkList[]:3
che sarebbe bene se il server è PHP, ma io uso Asp.NET MVC3 e cercare di ottenere questi valori con il legante modello predefinito:
public ActionResult Execute(ICollection<int> pkList)
Ma pkList è sempre nullo, sembra che il modello predefinito non sia in grado di collegarlo.
Come si risolve correttamente?
AGGIUNTOSOLUZIONE
ho usato la soluzione da Darin Dimitrov con impostando l'opzione traditional
in jQuery:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
Ora jQuery non aggiunge l'[]
ai parametri più e vengono inviati in questo modo:
pkList:1
pkList:2
pkList:3
E il raccoglitore modello predefinito MVC ottiene i valori correttamente.
Spero che questo aiuti qualcuno.
Will not il legante modello predefinito anche gestire elenchi separati da virgole di dati codificati di modulo? Qualcosa come 'data: {pkList: '1,2,3'}'? Ma altrimenti uso questo metodo per tutta la serializzazione del mio modello, la strada da percorrere per oggetti più complessi in JS. –
@PaulT., No, il raccoglitore modello predefinito non accetta 'data: {pkList: '1,2,3'}'. Se si desidera gestire tali richieste, sarà necessario un raccoglitore modello personalizzato in cui sarà necessario suddividere le voci e quindi analizzare ciascuna di esse su un numero intero.Non sarebbe necessario passare attraverso questo dolore se l'obiettivo è quello di inviare un array di numeri interi a un'azione del controller. –
ah sì capisco cosa intendi adesso, l'ho appena testato, è strano perché se hai due ingressi con lo stesso nome lo deserializzi in realtà in una lista, solo la serializzazione di jQuery per formare i dati del post non la gestisce (cioè .pkList = 1 & pkList = 2 funziona) –