Passare un array in un action tramite frombody

di il
5 risposte

Passare un array in un action tramite frombody

Salve a tutti sto cercando di imparare ad utilizzare il fetch in un progetto asp net. e mi sono blocca al momento di passare i dati che ho recuperato nella view in un action tramite un array, mi spiego meglio

ho un plusante che avvia una funzione

                <a class="btn btn-sm btn-primary" style="color:white" 
                    onclick="buttonEsporta_Click(this);">
                    <i class="far fa-file-alt"></i> Crea Tracciato Sel
                </a>
che in base la riga selezionata con checkbox mi dà il valore di quanto selezionato

<input id="Checkbox_@(groupPerizia.IdPerizia)" value="@groupPerizia.IdPerizia" type="checkbox" 
                                name="checkAll" class="checkSingle"/>


lo script della funzione è

async function buttonEsporta_Click(sender) {
    let ids = new Array();
    let checkboxes = document.querySelectorAll("input[type='checkbox']");
    //Faccio il ciclo per recuperare i dati del CheckBox
    for (var i = 1; i < checkboxes.length; i++) {
        if (checkboxes[i].checked) {
            ids.push(checkboxes[i].value);
        }
    }
    //Se ci sono dati selezionati 
    if (ids.length > 0) {
        console.log(ids);

        let response = await fetch("CreaTracciatotxt", {
            credentials: "same-origin",
            method: "post",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
           
            body: JSON.stringify({
                Items: ids
            })
        });
    }
}
fina recuperare i dati tutto funziona, l' ho testato con il console log e l ids mi restituisce i dati che ho selezionato!!

il Problema nasce lato controller ho letto un pò in giro e mi dice di utilizzare il frombody quindi ho fatto questa azione
con la relativa classe

       [HttpPost]
        public async Task<IActionResult> CreaTracciatotxt([FromBody] List<PerizieTxt> perizia)
        {
              foreach(var perizie in perizia)
              {
                  var test = perizie.Items;
                  Console.WriteLine(test);
              }
            return view();
        }
 
        public class PerizieTxt
        {
            public Guid Items { get; set; }
        }
ma quando premo il pulsante mi da l errore che l' oggetto e null dove sto sbagliando?

5 Risposte

  • Re: Passare un array in un action tramite frombody

    Metti un break point all'entrata del metodo ,procedi passo-passo e trova la l'istruzione che và in errore
  • Re: Passare un array in un action tramite frombody

    Non ho capito potresti essere un po' più chiaro?
  • Re: Passare un array in un action tramite frombody

    eternityck ha scritto:


    il Problema nasce lato controller ho letto un pò in giro e mi dice di utilizzare il frombody quindi ho fatto questa azione
    con la relativa classe [...]
    ma quando premo il pulsante mi da l errore che l' oggetto e null dove sto sbagliando?
    Credo che tu debba inviare un pacchetto JSON dove i dati dell'array sono valore di una proprietà perizia, oppure usare la convenzione perizia[indice] per le checkbox come nome attribuito al campo (dove "indice" ovviamente è un numero progressivo) e inviare direttamente i valori in POST come campi del form.

    Ciao!
  • Re: Passare un array in un action tramite frombody

    Marco, grazie per la risposta ma il problema non stà nell array sta nel
    JSON.stringify
    ho provato a mettere un stringa da prova ma al controllor non arriva niente.
    ho visto in giro che molti hanno avuto lo stesso problema ma non ho ancora capito come lo hanno risolto
  • Re: Passare un array in un action tramite frombody

    eternityck ha scritto:


    Marco, grazie per la risposta ma il problema non stà nell array sta nel JSON.stringify [...]
    Cosa vuol dire? La funzione JSON.stringify() trasforma semplicemente un oggetto JavaScript in una rappresentazione stringa in formato JSON dello stesso, quindi in sé non ha alcun problema, poiché fa esattamente quello che le si chiede.

    Bisogna capire intanto se occorre invocarla necessariamente (siamo sicuri che non si possa passare direttamente l'oggetto con i dati nel parametro body?).

    In secondo luogo, si può fare una prova *prima* senza l'array con una struttura più semplice, poi impiegando un array se il "model binding" elabora correttamente i dati JSON, anche analizzando sulla Console cosa viene veicolato al server e cosa si ottiene come risposta.

    In caso di dubbi, posta qui svariati dettagli per aiutarci a capire.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
5 risposte