2010-09-05 5 views
0

Cela a déjà été demandé par d'autres, mais je n'ai pas été en mesure d'utiliser leurs réponses.Envoi de paramètres dans l'appel AJAX

Je suis en train d'envoyer des données en procédant comme suit:

function addForumPost() { 
      var title = jQuery('#forumTitle').val(); 
      var message = htmlEncode(jQuery('#message').htmlarea("toHtmlString")); 
      var tagNames = addTags(); 

      var dataPost = $.toJSON({ title: 'testingsadf', message: message, tagNames: tagNames }); 
     jQuery.ajax({ 
      type: "POST", 
      url: "/Create", 
      data: dataPost, 
      dataType: "json", 
      success: function (result) { 
      } 
     }); 
    } 

J'ai vérifié, et doubla vérifié que l'entrée contient des données, mais je ne reçois que les données du paramètre de message dans mon contrôleur. Les deux autres valeurs sont nulles. Comme vous pouvez le voir dans l'exemple ci-dessus, j'ai même assigné du texte statique au paramètre title, mais je ne reçois toujours que des données pour le paramètre message.

Le contrôleur ressemble à ceci:

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Create(string title, string message, List<string> tagNames) 
     { 
      .... 
     } 

Répondre

1

Votre erreur est très simple. Si vous avez une action qui renvoie JsonResult, cela signifie et non que vous devez également envoyer les paramètres d'entrée codés JSON à la méthode. Il suffit de supprimer l'utilisation de $.toJSON() et d'utiliser l'objet comme valeur du paramètre data de jQuery.ajax (voir la réponse de Darin par exemple).

Si vous appelez ASMX Service Web au lieu d'action ASP.NET MVC vous devez utilisercontentType: "application/json; charset=utf-8" et de convertir les valeurs de tous les paramètres méthode Web à JSON, mais dans un autre sens peu (voir How do I build a JSON object to send to an AJAX WebService?). Mais ASP.NET MVC chapeau pas une telle exigence. MVC convertit les paramètres d'entrée que vous envoyez en respectant la méthode Parse (int.Parse, DateTime.Parse et ainsi de suite) et ne désérialise pas de JSON. Donc, si vous recherchez des exemples de code, regardez exactement quelle technologie est utilisée sur le backend: ASP.NET MVC, ASMX web serveces ou WFC.

1

Régler le paramètre traditional à partir de jQuery 1.4. Cela fonctionne pour moi:

var title = 'title'; 
var message = 'message'; 
var tagNames = ['tag1', 'tag2']; 

jQuery.ajax({ 
    type: 'POST', 
    url: '/Home/Create', 
    data: { title: title, message: message, tagNames: tagNames }, 
    dataType: 'json', 
    traditional: true, 
    success: function (result) { 
    } 
}); 

Avec cette action:

[HttpPost] 
public ActionResult Create(
    string title, 
    string message, 
    IEnumerable<string> tagNames 
) 
{ 
    return Json(new 
    { 
     Title = title, 
     Message = message, 
     TagNames = tagNames 
    }); 
} 
0
  1. Vous n'avez pas besoin de publier json pour le type d'action que vous avez décrit.
  2. Vous n'avez pas à assembler manuellement les champs dans une carte. Utilisez .serializeArray()

    var postData = $ ('myform'). SerializeArray()

Questions connexes