19 messaggi dal 17 gennaio 2011
Buongiorno,
come faccio a recuperare i valori della casselle di testo in un WebMethod chiamandolo da una funzione ajax?
 var MyformData = new FormData('form_NuovoCliente');
           
           $.ajax({         
               url: "inserimento.aspx/SalvaNuovaAnagrafica",
               type: "POST",
               data: MyformData,
               dataType: "json",
               processData: false,
               contentType: false,
               cache: false,

 [WebMethod]
        public static string SalvaNuovaAnagrafica()
        {
}

cosa devo mettere come parametro della funzione SalvaNuovaAnagrafica()
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,


cosa devo mettere come parametro della funzione SalvaNuovaAnagrafica()

Nulla, prova ad usare Request.Form["NomeCampo"] nel corpo di SalvaNuovaAnagrafica.
Comunque, se vuoi sapere cosa sta inviando il client al server, ispeziona la richiesta usando gli strumenti di sviluppo del browser (tasto F12). Ci troverai una tab "Network" o "Rete" da cui puoi vedere esattamente il contenuto delle richieste.

In alternativa, se stai usando ASP.NET 4.5, potresti anche provare il model binding per ASP.NET WebForms. In pratica, si usa con un metodo TryUpdateModel che servirà a popolare le proprietà di un tuo oggetto in base ai valori trovati nel form.

E' ben descritto qui ma personalmente non l'ho mai usato da un WebMethod. Provalo lo stesso, perché se funziona ti eviterà di dover recuperare i valori uno ad uno.
https://weblogs.asp.net/dwahlin/asp-net-4-5-web-forms-features-model-binding

ciao,
Moreno

Enjoy learning and just keep making
19 messaggi dal 17 gennaio 2011
Ciao,
GET /Default2.aspx?[object%20FormData]

invia questo, come faccio a recuperare l'oggetto FormData?

Grazie
Modificato da LuigiJin46 il 28 ottobre 2016 15.58 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Luigi,
allora, ho avuto un po' di tempo per fare una prova.

GET /Default2.aspx?[object%20FormData]

Questo è strano perché nel tuo codice hai mostrato una richiesta POST. Questa invece è una GET in cui l'oggetto FormData si trova in querystring. Presumo che sia l'esito di uno dei tuoi altri test.

Comunque, prova con questa funzione. Ho fatto in modo che prendesse il form e l'url come parametri, così la puoi riutilizzare in vari punti della tua applicazione.
function Invia(form, url) {
    var MyformData = {};
    $(form)
        .serializeArray()
        //filtro gli eventuali __VIEWSTATE e __EVENTVALIDATION
        //nel caso il tuo form sia quello di ASP.NET WebForms
        .forEach(function (item) { if (item.name.substr(0, 1) != "_") MyformData[item.name] = item.value; });
    return $.ajax({
        url: url,
        type: "POST",
        //Inviamo le coppie chiave-valore in formato json
        data: JSON.stringify({ dati: MyformData }),
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    });
}

Invochi la funzione da un bottone così:
<input type="button" value="Invia" onclick="Invia(this.form, 'WebForm1.aspx/SalvaNuovaAnagrafica')" />

e lato server, ricevi i dati in questo modo, con un dizionario.
[WebMethod]
public static string SalvaNuovaAnagrafica(Dictionary<string, string> dati)
{
  //qui elaborazione
  return "risultato";
}


ciao,
Moreno
Modificato da BrightSoul il 31 ottobre 2016 16.14 -

Enjoy learning and just keep making
19 messaggi dal 17 gennaio 2011
Ciao grazie per la tuia risposta.
Avevo provato anche questa cosa:
function ProcediInserimentoNuovaAnagrafica() {

              var data = { Item: JSON.stringify($("#form1").serializeArray()) };

              $.ajax({
                  url: "Default.aspx/SalvaNuovaAnagrafica",
                  type: "POST",
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  processData: false,
                  cache: false,
                  data: JSON.stringify(data),
                  success: function (data) {
                      if (data == "True") {


                      } else {
                          alert("Attenzione!");
                      }
                  },
                  error: function () { }
              })
          };

    <form id="form1" name="form1" method="post">
    <div>
    Rag Sociale
                    <input type="text" id="txtRagSociale" name="txtRagSociale" class="input-text-border"/>
                    
                    
                        Codice
                    
                    <input type="text" id="txtCodice" name="txtCodice" class="input-text-border"/>
                  
    </div>
         <div class="pulsante_conferma" onclick="ProcediInserimentoNuovaAnagrafica()">
                    SI</div>
    </form>


Questo è quello che ricevo nel post
{Item: "[{"name":"txtRagSociale","value":"a"},{"name":"txtCodice","value":"b"}]"}
Adesso non so come recuperare queste informazioni nel mio Web Method

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
Segui fedelmente l'esempio che ti ho postato, in quel modo riuscirai a risolvere il problema.


Adesso non so come recuperare queste informazioni nel mio Web Method

Se vuoi proprio usare il tuo esempio, il web method dovrà prendere come argomento un oggetto che ricalca la struttura del json che gli stai inviando.
In particolare, dovrà essere una lista di oggetti che possiedono le proprietà name e value. Questi oggetti dovrai crearli tu. Lo trovi spiegato in questo articolo di Rick Strahl. Lui la classe con le proprietà name e value l'ha chiamata NameValue.
https://weblog.west-wind.com/posts/2010/sep/07/using-jquery-to-post-form-data-to-an-aspnet-asmx-ajax-web-service

Il mio esempio ti evitava questo passaggio, infatti utilizzava un semplice Dictionary.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.