Как передать объект массива из контроллера Javascript в c#, используя ajax - PullRequest
0 голосов
/ 15 января 2020

Я хочу передать данные из моего файла cs html в мой контроллер. Я хочу передать массив. Итак, я создаю этот код:

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");
            }
        });
    }

Это мой метод контроллера:

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

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

Это мой объект RispostaUtente

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

        public RisposteUtente()
        {

        }
    }

Теперь, если я пытаюсь выполнить функцию js, вызов поступает в контроллер, но RisposteUtente [] имеет значение null.

1 Ответ

1 голос
/ 15 января 2020

Измените ваш AJAX вызов следующим образом:

    $.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");
        }
    });

И ваш Controller метод будет выглядеть следующим образом:

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("");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...