2010-04-01 20 views
6

Sto tentando di pubblicare alcuni dati con jQuery Ajax, ma i parametri nel mio metodo Ajax sono nulli.Asp.Net Mvc I parametri di input JQuery ajax sono nulli

Questo è semplice test per inviare i dati:

var dataPost = { titel: 'titel', message: 'msg', tagIds: 'hello' }; 
     jQuery.ajax({ 
      type: "POST", 
      url: "Create", 
      contentType: 'application/json; charset=utf-8', 
      data: $.toJSON(dataPost), 
      dataType: "json", 
      success: function(result) { 
       alert("Data Returned: "); 
      } 
     }); 

E il mio metodo Ajax assomiglia a questo:

[HttpPost] 
public ActionResult Create(string title, string message, string tagIds) 
{... } 

C'è qualcosa che non va di base con i dati mando, ma non posso capire cosa. Per tutto il tempo il titolo, il messaggio e il tagId sono nulli, quindi c'è qualcosa di sbagliato nella codifica, semplicemente non so cosa.

In modo ottimale il parametro tagIds dovrebbe essere un array o un elenco di guids.

Nota: Il jQuery.toJSON è questo plugin

risposta

14

L'azione del controller Create non si aspetta parametri da JSON serializzato in modo da non dover. Cerchiamo di passarli direttamente invece:

var dataPost = { titel: 'titel', message: 'msg', tagIds: 'hello' }; 
jQuery.ajax({ 
    type: "POST", 
    url: "Create", 
    data: dataPost, 
    dataType: "json", 
    success: function(result) { 
     alert("Data Returned: "); 
    } 
}); 
+2

Grazie a quanto pare il tipo di contenuto ha reso più problemi che buoni. – Dofs

+1

Lo stesso problema, non riuscivo a capire perché l'associazione modello non funzionasse per una semplice stringa ... Ho impostato contentType su json. Dopo averlo rimosso, ha funzionato alla grande. – DavGarcia

0

Non abbiamo bisogno del contentType: 'application/json; charset=utf-8', e $.toJSON

Ecco il codice mi rende felice!

$(function() { 
     $("#btnSumbit").click(function() { 
      $('#results').hide(); 
      $('#loadingmessage').show(); 
      var a = $("#query").val(); 

      $.ajax({ 
       type: "POST", 
       url: "/Search/Index", 
       data: ({ query: a }), 
       datatype: "json", 
       success: function (data) { 
        $('#results').empty(); 
        for (var i = 0; i < data.length; i++) { 
         var div = "<div>" + data[i].Name + "</div>"; 
         $("#results").append(div); 

        } 
        $('#loadingmessage').hide(); 
        $('#results').show(); 
       }, 
       failure: function (errMsg) { 
        $('#loadingmessage').hide(); 
        alert(errMsg); 
       } 
      }); 
     }); 
    });