Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    passare ad un webmethod un vettore di oggetti javascript

    Salve a tutti, come da titolo ho un problema con js e webmethod..

    lato client, creo oggetti che inserisco dentro un vettore js...
    questo vettore dovrebbe essere passato ad un webmewthod .asmx lato server, ma non lo accetta proprio.. inoltre vorrei evitare la serializzazione JSON se possibile...
    questo è il codice lato client:

    codice:
    <script type="text/javascript">
           var Person = {};
            var personeList = [];
            //1
               Person.nome = "Mario";
               Person.cognome = "Rossi";
               Person.eta = "37";
               personeList[0] = Person;
            // 2
               Person.nome = "Giorgio";
               Person.cognome = "Verdi";
               Person.eta = "42";
               personeList[1] = Person;
    
            // 3
               Person.nome = "Aldo";
               Person.cognome = "Moro";
               Person.eta = "41";
               personeList[2] = Person;
    
     var mime_charset = "application/json; charset=utf-8";
            $.ajax({
                type: "POST",
                url: "WebServices/LoadCombo.asmx/testArray",
                dataType: "json",
                contentType: mime_charset,
                data: {
                           personsList: personeList 
                         },
                success: function (msg) {
    
                    alert("tutto ok!!!");
    
                },
                error: function (err) {
                    alert(err.responseText);
                }
            });
    </script>
    ... e questo è il codice lato server

    codice:
     #region testArray
    
        public class Person 
        {
            public string nome;
            public string cognome;
            public string eta;
        }
        [WebMethod(enableSession: true)]
        public void testArray(List<Person> personsList) 
        
        {
    
            Person persona = new Person();
           ecc... ecc......
    
        }
            #endregion
    ringrazio in anticipo per l'aiuto...

    PS: se pensate sia un problema di codice lato server... spostate pure la discussione

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Stai mandando un array con lo stesso oggetto ripetuto tre volte contenente un'unica persona di nome "Aldo Moro". Ogni assegnazione sovrascrive la precedente. Usa un costruttore o tre oggetti diversi, ma di certo non un unico oggetto di nome Person!!!!

  3. #3
    si... ok, me ne sono appena accorto

    e per il passaggio dell'array al webmethod come faccio??

  4. #4
    ora l'oggetto js passa al webmethod lato server, con questo codice:

    codice:
     $.each(inputBoxValues, function (index, valori) {
                    var nome= valori.getAttribute("nome");
                    var cognome= valori.getAttribute("cognome");
                    var eta= $(this).val();
    
                    lista[index] = {
                        
                        nome: nome,
                        cognome: cognome,
                        eta: eta
                    }
    
                });
    
                jsonString = JSON.stringify({ personeList: lista });
    
                var mime_charset = "application/json; charset=utf-8";
                $.ajax({
                    type: "POST",
                   url: "WebServices/LoadCombo.asmx/testArray",
                    dataType: "json",
                    contentType: mime_charset,
                    data: jsonString,
                    success: function (msg) {
                        alert("ll");
    
                    },
                    error: function (err) {
                        alert(err.responseText());
                    }
    
                });
    i dati passano al webmethod, con le proprietà corrette, ma i valori di tutte le proprietà sono null....

    da cosa può dipendere???

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Posta il codice HTML. Da quello che scrivi sembrerebbe che ci siano dei tag html del tipo <tag nome="blabla" cognome="blabla">, il che francamente mi sembra strano.

    In ogni caso questo è un tipico caso in cui l'uso di un costruttore si rivela la scelta migliore.
    Ti faccio un esempio. Immaginiamo di avere tanti gruppi di textbox nello stesso form con gli attributi name così settati:[list=1][*]primo gruppo di textbox: nome_1, cognome_1, eta_1;[*]secondo gruppo di textbox: nome_2, cognome_2, eta_2;[*]terzo gruppo di textbox: nome_3, cognome_3, eta_3;[*]etc. etc.[/list=1]
    Bene, per serializzarle potremmo fare qualcosa del genere:

    codice:
    // creiamo il nostro costruttore
    function Persona (sNome, sCognome, sEta) {
    	this.nome = sNome;
    	this.cognome = sCognome;
    	this.eta = sEta;
    }
    
    // estraiamo i dati
    
    var aPersone = [], oForm = document.tuoForm;
    
    for (var nPersId = 1; nPersId < 4; aPersone.push(new Persona(oForm["nome_" + nPersId].value, oForm["cognome_" + nPersId].value, oForm["eta_" + nPersId].value)), nPersId++);
    
    var jsonString = JSON.stringify(aPersone);
    
    var mime_charset = "application/json; charset=utf-8";
    
    // etc etc
    Spero sia chiaro. In ogni caso posta il codice HTML!!

  6. #6
    Ciao carlomarx, il tuo codice mi sembra alquanto perfetto ed è proprio quello che cercavo,
    nel codice html ho dato agli input due attributi di tipo nome e cognome, e risultano molto comodi per effettuare controlli incrociati, e jQuery sembra riconoscerli tranquillamente in questo modo:

    codice:
    $(".classeTabella td").find('input[nome="Giorgio"]');
    ad ogni modo, la serializzazione ora va bene e passa tranquillamente lato server..

    ti ringrazio.

    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.