/ / FormCollection no se rellena en ajax POST - asp.net-mvc, ajax, asp.net-mvc-2, jquery

FormCollection no se rellena en ajax POST - asp.net-mvc, ajax, asp.net-mvc-2, jquery

Tengo una solicitud POST ajax que se supone queestar enviando datos a una acción MVC de ASP.NET. Esto funciona bien el 95% del tiempo, pero de vez en cuando, por cualquier motivo, mi FormCollection está vacía y, como resultado, la aplicación falla.

Habría incluido los valores de solicitud sin procesar, sin embargo, no he podido reproducirlo yo mismo.

Mi llamada ajax se ve así:

var data = {};
data.Property = 123; // etc

$.ajax({
url: url,
type: "POST",
dataType: "json",
data: JSON.stringify(data),
success: function(viewModel) {
// do stuff
}
});

¿Qué haría que FormCollection se vacíe intermitentemente en la POST de ajax?

He sospechado cosas como tiempos de espera de sesiones y similares, pero espero que se produzcan errores antes de entrar en acción.

Respuestas

2 para la respuesta № 1

En primer lugar, parece que estás enviando una solicitud JSON (JSON.stringify(data)). Esto no se admite fuera de la caja en ASP.NET MVC 2. Es en ASP.NET MVC 3 que un JsonValueProviderFactory Fue presentado. Puedes echar un vistazo a la siguiente artículo lo que explica con más detalle las solicitudes JSON en ASP.NET MVC.

Además, cada vez que desee enviar una solicitud JSON, debe configurar el tipo de contenido adecuado usando la contentType parámetro:

data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",

y por último, pero no menos importante, le recomendaría que utilice modelos de vista en lugar de confiar en algunas estructuras mal escritas, como FormCollection, en las acciones de su controlador y tener que escribir el código de plomería.


ACTUALIZAR:

FormCollection es una colección de pares clave / valor. Entonces, si desea usarlo (a pesar de mi recomendación en contra), no debe usar una solicitud JSON. Debe utilizar una solicitud de valor de clave normal. Así que elimine el JSON.stringify de su solicitud AJAX y elimine el parámetro contentType: "application / json" también. Realmente no tiene sentido usar una colección de pares clave / valor con tipos JSON.