2010-01-04 28 views
28

Estoy pasando dos parámetros de cadena de una llamada jQuery ajax a un método de controlador MVC, esperando una respuesta json. Puedo ver que los parámetros se completan en el lado del cliente, pero los parámetros coincidentes en el lado del servidor son nulos.jquery llamada Ajax - los parámetros de datos no se pasan a la acción MVC Controller

Aquí está el javascript:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "List/AddItem", 
    data: "{ ListID: '1', ItemName: 'test' }", 
    dataType: "json", 
    success: function(response) { alert("item added"); }, 
    error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); } 
}); 

Aquí es el método de control:

Function AddItem(ByVal ListID As String, ByVal ItemName As String) As JsonResult 
    'code removed for brevity 
    'ListID is nothing and ItemName is nothing upon arrival. 
    return nothing 
End Function 

¿Qué estoy haciendo mal?

+6

¿No debería ser 'de datos: {ListID: '1', NombreDeElemento: 'prueba'}, '? Sin comillas dobles – LukLed

+0

LukeLed tiene razón: está pasando una cadena en lugar de un objeto. Quita las comillas dobles y estarás bien. – pixeline

+0

Gracias por la respuesta. Intenté eliminar las comillas dobles y obtuve el mismo resultado. – Grant

Respuesta

30

me trataron:

<input id="btnTest" type="button" value="button" /> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#btnTest').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "/Login/Test", 
      data: { ListID: '1', ItemName: 'test' }, 
      dataType: "json", 
      success: function(response) { alert(response); }, 
      error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); } 
     }); 
     }); 
    }); 
</script> 

y C#:

[HttpPost] 
public ActionResult Test(string ListID, string ItemName) 
{ 
    return Content(ListID + " " + ItemName); 
} 

Funcionó. Elimine contentType y establezca data sin comillas dobles.

+0

Gracias por la respuesta. Intenté esto y obtuve el mismo resultado. ¿Podría haber algo en mi archivo web.config que no esté configurado correctamente o algo así? – Grant

+1

@Grant: ¿Has eliminado 'contentType'? Con 'contentType' no funciona. – LukLed

+0

Eliminé contentType y las comillas dobles del parámetro data. Sin suerte. – Grant

1

Si tiene problemas con el almacenamiento en caché ajax puede apagarlo:

$.ajaxSetup({cache: false}); 
+0

También tengo el mismo problema. ¿Por qué caché claro? ¿Cuál es su efecto? y dónde escribirlo, ¿estará dentro de '$ (document) .function() {}'. – MegaBytes

+0

si asp.net mvc, puede desactivarlo en un bt de javascript utilizando una página de diseño, luego todas las páginas tendrían su caché ajax desactivado. el único problema con esto es como dije que lo apaga para todas las llamadas ajax. en su lugar, normalmente puede especificar si desea que las llamadas ajax individuales se guarden en la memoria caché o no. lo que normalmente hace es agregar una fecha/hora al final de la url de solicitud ajax para que el navegador/servidor se deje engañar y piense que es una nueva solicitud cada vez – Mocksy

0

En mi caso, si quito la del contentType, me sale el error interno del servidor .

Esto es lo que tengo trabajo después de múltiples intentos:

var request = $.ajax({ 
    type: 'POST', 
    url: '/ControllerName/ActionName' , 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({ projId: 1, userId:1 }), //hard-coded value used for simplicity 
    dataType: 'json' 
}); 

request.done(function(msg) { 
    alert(msg); 
}); 

request.fail(function (jqXHR, textStatus, errorThrown) { 
    alert("Request failed: " + jqXHR.responseStart +"-" + textStatus + "-" + errorThrown); 
}); 

Y este es el código del controlador:

public JsonResult ActionName(int projId, int userId) 
{ 
    var obj = new ClassName(); 

    var result = obj.MethodName(projId, userId); // variable used for readability 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

Tenga en cuenta que el caso de ASP.NET es poco diferente, tenemos para aplicar JSON.stringify() a los datos como se menciona en el update de esta respuesta.

+0

http://stackoverflow.com/questions/26605065/jquery-ajax -return-success-error-from-mvc-net-controller –

1

Es necesario añadir -> contentType: "application/json; charset = UTF-8",

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#btnTest').click(function() { 
     $.ajax({ 
      type: "POST", 
      url: "/Login/Test", 
      data: { ListID: '1', ItemName: 'test' }, 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function(response) { alert(response); }, 
      error: function(xhr, ajaxOptions, thrownError) { alert(xhr.responseText); } 
     }); 
     }); 
    }); 
</script> 
Cuestiones relacionadas