2010-02-17 15 views
5

El diccionario de parámetros contiene una entrada nula para el parámetro 'appId' del tipo 'System.Int32' no nulo 'para el método' System.Web.Mvc .ContentResult CheckForInstaller (Int32) 'en' HLIT_TicketingMVC.Controllers.TicketController '. Un parámetro opcional debe ser un tipo de referencia, un tipo anulable o ser declarado como un parámetro opcional.

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 
    }); 
}; 

El objeto de datos se construye de la siguiente manera:

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

también he intentado una cadena jsonified:

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

y

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

Validé que el mensaje está llegando con una pr valor int operativo antes de intentar publicar. El puntero del ratón sobre depurador más recientemente mostró: {appId="6"}

la firma del método en el controlador es:

public ContentResult CheckForInstaller(int appId) 

Cuando quito el parámetro de la firma del método, no el punto de interrupción en el interior, por lo que es o bien la firma necesitando atributos de algún tipo, o el mensaje no está construido correctamente, creo.

+0

¿Tiene algún resultado cuando está cambiando el int a una cadena: public ContentResult CheckForInstaller (String appId)? – Pbirkoff

+0

¿Qué es ese objeto de aplicación? ¿Estás seguro de que funciona como se esperaba? –

+0

@ çağdaş - sí, cuando paso el mouse sobre el resultado, muestra el valor que espero. @ Pbirkoff - No intenté eso pero encontré el problema, la respuesta a continuación es aceptada. – Maslow

Respuesta

9

Poner esta:

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

MVC no se va a analizar el JSON en un int. Desea el valor predeterminado de application/x-www-form-urlencoded.

+0

+1 impresionante funciona – Maslow

+0

En tales casos, ¿tenemos que definir una ruta especial para el método de acción que se llamaría? ¿o está vinculado automáticamente? –

+0

@LordCover: No, no necesita una ruta especial. Está ligado como cualquier otra forma. –

2

creo que tal vez eso va a enviar al controlador JSON probar esto

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

Tiene razón acerca de JSON, pero sus 'datos' ya son correctos. –

+0

En tales casos, ¿tenemos que definir una ruta especial para el método de acción que se llamaría? ¿o está vinculado automáticamente? –

Cuestiones relacionadas