2010-02-17 4 views
5

Le dictionnaire de paramètres contient une entrée null pour le paramètre 'appId' du type non-nullable 'System.Int32' pour la méthode 'System.Web.Mvc .ContentResult CheckForInstaller (Int32) 'dans' HLIT_TicketingMVC.Controllers.TicketController '. Un paramètre facultatif doit être un type de référence, un type Nullable ou être déclaré en tant que paramètre facultatif.

function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
    type:'POST', 
    url:url, 
    data:message, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success:successFunc, 
    error:errorFunc 
    }); 
}; 

L'objet de données est construite comme suit:

var message={"appId":application.val()}; 

J'ai aussi essayé une chaîne jsonified:

var message="{'appId':"+application.val()+"}"; 

et

var message="{'appId':'"+application.val()+"'}"; 

Je validais que le message arrive avec un pr oper int valeur avant d'essayer de poster. La souris sur débogueur plus récemment montré: {appId="6"}

La signature de la méthode sur le contrôleur est:

public ContentResult CheckForInstaller(int appId) 

Lorsque je supprime le paramètre de la signature de la méthode, il ne touche le point d'arrêt à l'intérieur, il est donc soit la signature besoin d'attributs d'une certaine sorte, ou le message n'est pas construit correctement, je crois.

+0

obtenez-vous un résultat lorsque vous remplacez l'int par une chaîne: public ContentResult CheckForInstaller (String appId)? – Pbirkoff

+0

Quel est cet objet d'application? Êtes-vous sûr que cela fonctionne comme prévu? –

+0

@ çağdaş - oui quand je souris sur le résultat, cela montre la valeur que j'attends. @ Pbirkoff - Je n'ai pas essayé mais j'ai trouvé le problème, répondez ci-dessous accepté. – Maslow

Répondre

9

Retirez ceci:

contentType: 'application/json; charset=utf-8', 

MVC ne va pas analyser le JSON dans un int. Vous voulez la valeur par défaut de application/x-www-form-urlencoded.

+0

+1 impressionnant cela fonctionne – Maslow

+0

Dans de tels cas, devons-nous définir un itinéraire spécial pour la méthode d'action qui serait appelée? ou est-il automatiquement lié? –

+0

@LordCover: Non, vous n'avez pas besoin d'un itinéraire spécial. C'est lié comme n'importe quelle autre forme. –

2

je pense que ce peut-être que vous envoyez JSON au contrôleur essayer ce

function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
    type:'POST', 
    url:url, 
    data:"appId=" + application.val(),//not sure where you get the value from in your current code 
    dataType: 'json', 
    success:successFunc, 
    error:errorFunc 
    }); 
}; 
+0

Vous avez raison à propos de JSON, mais son 'data' est déjà correct. –

+0

Dans de tels cas, devons-nous définir un itinéraire spécial pour la méthode d'action qui serait appelée? ou est-il automatiquement lié? –

Questions connexes