2011-10-04 23 views
15

¿Es posible enviar datos de formulario como JSON, sin utilizar AJAX?Envíe un formulario como JSON (no AJAX)

He intentado cambiar el enctype:

<form enctype="application/json"></form> 

Pero eso no es un valor válido de acuerdo on w3schools

La razón me gustaría que este comportamiento es que la URL solicitada devolverá un archivo, lo que me Obviamente no puedo hacer nada si uso AJAX. Me gustaría enviar datos JSON marcados como Content-Type: application/json para que ASP.NET MVC use su enlace JSON.

+0

¿Por qué exactamente no puedes hacer nada con el archivo? Siempre puede escribir los contenidos en otra ventana ... que descargará el archivo siempre que el tipo de contenido sea correcto. – Josh

+0

¿Por qué no puedes usar un formulario de POST regular? – RoccoC5

+2

Consulte esta pregunta AS. Http://stackoverflow.com/questions/4256556/post-json-without-model-and-ajax – Prasanth

Respuesta

0

puedes probar;

// HTML

<form type="POST" action="/Home/Test"> 
<input id="foo" value="hede"> 
</form> 

// dto

public class TestInDto{ 
public string foo {get;set;} 
} 

// casa controlador

[HttpPost] 
void Test(TestInDto inDto){ 
var foo = inDto.foo; 

} 
1

Sí, puede serializar forma como un objeto con el plugin. Escribo una muestra para ti;

// Cabeza

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script src="jquery.serialize-object.js"></script> 

Puede descargar plugin desde here

// Formulario

<form id="frm"> 
<input type="text" name="Model[Firstname]"> 
<input type="text" name="Model[Lastname]"> 
<input type="text" name="ModelDetail[PhoneNumber]"> 
... 
<button type="button" onclick="sendForm()">Send</button> 
</form> 

// JS

function sendForm(){ 
model_data = $("#frm").serializeObject(); 
$.ajax({ 
url: 'YOUR_SERVICE_URL', 
type: 'POST', 
contentType: 'application/json', 
data: JSON.stringify(model_data), 
dataType: 'json', 
success:function(e){ 
    // I know, you do not want Ajax, if you callback to page, you can refresh page here 
    } 
}); 

Buena suerte!

+0

https://github.com/macek/jquery-serialize-object – shadowbq

1

Podría usar JSON.stringify() para serializar su objeto del lado del cliente y luego meterlo en una entrada oculta y enviar su formulario ... y luego, en el lado del controlador, sacarlo de Request.Form y deserialize en tu objeto?

[Editar] Acabo de ver en la sección de comentarios debajo de la pregunta original que esto era esencialmente una publicación duplicada y que este stackoverflow funcionó como una solución.

-1

Puede enviar la solicitud por AJAX y luego generar una URL de descarga de archivos en el controlador y enviarla nuevamente en la respuesta de AJAX. Luego puedes abrir esa URL en otra ventana. Esta sería una solución completa basada en AJAX para que pueda usar JSON.

+0

OP quería ¡No use AJAX! – Grandpa

0

De acuerdo con los estándares del W3C no se puede pasar los datos como JSON usando

<form enctype="application/json"></form>

Descripción

Los agentes de usuario que implementan este specification transmitirá JSON datos de sus formas siempre que sea de forma El atributo enctype se establece en application/json.Durante el período de transición, los agentes de usuario que no admitan esta codificación serán fall back para usar application/x-www-form-urlencoded. Esto puede ser detected en el lado del servidor, y el conversion algorithm descrito en este specification puede usarse para convertir dichos datos a JSON.

El formato de ruta utilizado en input names es sencillo. Para empezar, cuando no hay información de estructuración está presente, la información sólo será capturado como keys en un objeto

Reference DOC

+0

La aplicación/json enctype está en desuso y no se recomienda su uso. Ver: https://www.w3.org/TR/html-json-forms/ – jsears

-1

JSON Pruebe este simple tienda de la matriz de la POST en la variable y luego codificarlo como obj JSON. como este ->

$ postarray = ($ _ POST);
$ jsondata = json_encode ($ postarray);

sentimos su

para PHP
0

Ahora puede configurar la forma enctype = 'application/json' de acuerdo con las nuevas normas del W3C publicadas el 29 de mayo de 2014.

Puede comprobarlo: http://www.w3.org/TR/html-json-forms/

+3

Espero que esto sea compatible algún día. Lo intenté con Chrome 45 y lo codificó como application/x-www-form-urlencoded, lo mismo que sin usar 'enctype'. No puedo encontrar ningún recurso que documente el soporte para esto, como http://caniuse.com. –

Cuestiones relacionadas