2011-10-04 13 views
15

È possibile inviare dati modulo come JSON, senza utilizzare AJAX?Invia un modulo come JSON (no AJAX)

Ho provato a cambiare l'enctype:

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

Ma questo non è un valore valido secondo on w3schools

La ragione per cui vorrei che questo comportamento è che l'URL richiesto restituirà un file, che ho ovviamente non posso fare nulla se utilizzo AJAX. Vorrei inviare dati JSON contrassegnati come Content-Type: application/json in modo che ASP.NET MVC utilizzi il suo bind JSON.

+0

Perché esattamente non puoi fare nulla con il file? Puoi sempre scrivere il contenuto in un'altra finestra ... che scaricherà il file finché il tipo di contenuto è corretto. – Josh

+0

Perché non puoi usare un modulo POST regolare? – RoccoC5

+2

Si prega di vedere questa domanda SO http://stackoverflow.com/questions/4256556/post-json-without-model-and-ajax – Prasanth

risposta

0

puoi provare;

// html

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

// dto

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

// home regolatore

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

} 
1

Sì, è possibile serializzare forma come un oggetto con il plugin. Scrivo un campione per te;

// Capo

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

È possibile scaricare plug-in da here

// Modulo

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

Buona fortuna!

+0

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

1

È possibile utilizzare JSON.stringify() per serializzare l'oggetto lato client, quindi inserirlo in un input nascosto e inviare il modulo ... e quindi nel lato controller estrarlo dalla Request.Form e deserializzare nel tuo oggetto?

[Modifica] Ho appena visto nella sezione commenti sotto la domanda originale che si trattava essenzialmente di un post duplicato e che questo stackoverflow funzionava come soluzione.

-1

È possibile inviare la richiesta da AJAX e quindi generare un file che scarica l'URL nel controller e inviarlo di nuovo nella risposta AJAX. Quindi puoi semplicemente aprire quell'URL in un'altra finestra. Questa sarebbe una soluzione completa basata su AJAX in modo da poter utilizzare JSON.

+0

OP voluto non usare AJAX! – Grandpa

0

Come da standard W3C non è possibile passare i dati come JSON utilizzando

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

Descrizione

I programmi utente che implementano questo specification trasmetterà i dati JSON dalle loro forme ogni volta che il modulo L'attributo enctype è impostato su application/json.Durante il periodo di transizione, i programmi utente che non supportano questa codifica saranno fall back utilizzando application/x-www-form-urlencoded. Questo può essere detected sul lato server e il conversion algorithm descritto in questo specification può essere utilizzato per convertire tali dati in JSON.

Il formato del percorso utilizzato in input names è semplice. Per cominciare, quando è presente alcuna informazione strutturazione, l'informazione verrà semplicemente catturato come keys in un oggetto

Reference DOC

+0

L'applicazione/json enctype è deprecato e non è raccomandato per l'uso. Vedi: https://www.w3.org/TR/html-json-forms/ – jsears

-1

JSON Prova questo semplice deposito l'array POST in variabile e lo codifica come JSON obj. come questo ->

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

spiacenti sua per PHP

0

È ora possibile impostare forma enctype = 'application/json' secondo i nuovi standard W3C ha pubblicato il 29 maggio 2014.

È possibile controllare: http://www.w3.org/TR/html-json-forms/

+3

Spero che questo sia supportato un giorno. Ho appena provato con Chrome 45 e lo ha codificato come application/x-www-form-urlencoded, lo stesso che senza usare 'enctype'. Non riesco a trovare alcuna risorsa che supporti il ​​supporto per questo, come http://caniuse.com. –