bircastri
bircastri

Reputation: 2169

How pass array object from Javascript to c# controller using ajax

I want to pass data from my cshtml file to my Controller. I want to pass an array. So I m build this code:

js:

function nextFunction() {
        var listaDomande = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewBag.pagina.domande));
        var arrayRisposte = [];
        //mi devo ricostruire il numero di domande che c'è in pagina, per ogni tipo devo verificarne i valori
        for (i = 0; i < listaDomande.length; i++) {
            var dom = listaDomande[i];
            //alert(dom.idTipoDomanda);
            if (dom.idTipoDomanda == 6) {
                //DOMANDA CON OPTION BUTTON
                //devo verificare per questo tipo di domande, quante opzioni erano possibili
                //e recuperare solo il valore della opzione selezionata
                for (n = 0; n < dom.opzioniDomanda.length; n++) {
                    //verifico quale è l'opzione selezionata dall'utente
                    var opzioniDomanda = dom.opzioniDomanda[n];
                    if (document.getElementById("oDomanda" + opzioniDomanda.ordinalId).checked) {
                        var value = document.getElementById("oDomanda" + opzioniDomanda.ordinalId).value;
                        alert(value);
                        var risposta = {
                            idDomanda: dom.rowId,
                            valore: value
                        };
                        arrayRisposte[i] = risposta;
                        break;
                    }
                }
            } else if (dom.idTipoDomanda == 3) {
                //TEXT BOX
            }
        }


        var valueText = document.getElementById("tDomanda");
        alert(listaDomande.length);

        $.ajax({
            url: '/Questionario/nextPage',
            data: JSON.stringify({ risposta: arrayRisposte}),
            type: "GET",
            success: function (data) {
                //TODO: Add whatever if you want to pass a notification back
                alert("RR Salvato");
            },
            error: function (error) {
                //TODO: Add some code here for error handling or notifications
                alert("Si è verificato un errore");
            }
        });
    }

this is my controller method:

[HttpGet]
        public void nextPage(RisposteUtente[] risposta)
        {
            try
            {
                Console.WriteLine("");

            }
            catch (Exception e)
            {
                Console.Write("");
            }
        }

This is my RispostaUtente object

public class RisposteUtente
    {
        public int idDomanda { set; get; }
        public String valore { set; get; }

        public RisposteUtente()
        {

        }
    }

now if I try to execute js function, the call comes to the controller, but RisposteUtente[] is null.

Upvotes: 0

Views: 66

Answers (1)

Rahul Sharma
Rahul Sharma

Reputation: 8311

Modify your AJAX call like this:

    $.ajax({
        url: '@Url.Action("nextPage", "Questionario")',
        data: { "json": JSON.stringify(arrayRisposte)},
        type: "GET",
        success: function (data) {
            //TODO: Add whatever if you want to pass a notification back
            alert("RR Salvato");
        },
        error: function (error) {
            //TODO: Add some code here for error handling or notifications
            alert("Si è verificato un errore");
        }
    });

And your Controller method will look like:

using System.Web.Script.Serialization;
//using Newtonsoft.Json

[HttpGet]
public void nextPage(string json)
{
  try
  {
    var serializer = new JavaScriptSerializer();
    dynamic jsondata = serializer.Deserialize(json, typeof(object));

    //Deserialize your JSON string if the struccture is an array
    //var deserializedjson=JsonConvert.DeserializeObject<List<RisposteUtente>>(json);


    //Get your variables here from AJAX call if the string is not an array
    var idDomanda = jsondata["idDomanda"];
    var valore =jsondata["valore"];

    //Do something with your variables here 
    Console.WriteLine("");

  }
  catch (Exception e)
  {
    Console.Write("");
  }
}

Upvotes: 1

Related Questions