Perché devo associare il nome del parametro per ottenere dati json dalla chiamata ajax nell’applicazione web MVC4?

Voglio solo sapere perché è necessario che .NET corrisponda al nome del parametro con il nome della chiave dell’object JSON?

Anteprima del codice rapido qui …

var json = { "service": "COMMON", "method": "MENU_SUBLIST", "UID": "1000007", "ULID": "stackoverflow", "UNM": "queston", "SITE": "1", "DEPT": "2", "LANG": "ko", "MENUID": "0000", "STEPMENU": "", "ACTIONNAME": "" } 

Ok, chiamiamo un’azione in un controller tramite Ajax.

 $.ajax({ type: "POST", url: "DATACRUD.json", data: JSON.stringify(json), contentType: "application/json; charset=utf-8", dataType: "json", async: false, //_async, success: function (result) { } }); 

E il mio codice di azione c # qui ..

 [HttpPost] public ActionResult DATACRUD(string jsondata) { return Json(new{ fromMVC = jsondata}); } // Just example. 

jsondata è qui null perché non ho trovato il nome della chiave.

Per DATACRUD per ottenere i dati JSON, devo fare così.

 { jsondata : { "service":"COMMON", "method":"MENU_SUBLIST", "UID":"1000007", "ULID":"stackoverflow", "UNM":"queston", "SITE":"1", "DEPT":"2", "LANG":"ko", "MENUID":"0000", "STEPMENU":"", "ACTIONNAME":"" } } 

Qui la domanda n. 1 Perché devo abbinare il nome della chiave con il nome del parametro?

Lo fa? deve esserci una ragione, e voglio sapere perché.


E quello che voglio fare è …

 { "service":"COMMON", "method":"MENU_SUBLIST", "UID":"1000007", "ULID":"stackoverflow", "UNM":"queston", "SITE":"1", "DEPT":"2", "LANG":"ko", "MENUID":"0000", "STEPMENU":"", "ACTIONNAME":"" } 

per passare questi dati JSON nell’azione, DATACRUD ho specificato sopra

Voglio l’azione DATACRUD per prendere i dati JSON e consumarli indipendentemente dal nome della chiave.

C’è un’altra risposta per questo. La risposta è creare un modello per i dati JSON e riceverlo come un tipo di modello e ottenere il modello come stringa.

Ma la definizione dei modelli non può essere ansible nelle mie app. Potrebbe causare un centinaio di creazione di modelli.

Quindi ricevere i dati JSON dopo aver creato un modello è l’ultima cosa di cui ho bisogno.

In questo caso, come dovrei fare?

Non è consentita la corrispondenza del nome della chiave.

Non è consentito alcun modello di generazione.

Nessuna struttura di terze parti è consentita.

Penso che le possibili risposte si riducano a pochi ….

Cosa devo fare?

Base sul controller post MVC: ottiene l’object JSON dal corpo HTTP? L’azione dovrebbe essere:

 [HttpPost] public ActionResult DATACRUD() { Stream req = Request.InputStream; req.Seek(0, System.IO.SeekOrigin.Begin); string json = new StreamReader(req).ReadToEnd(); return Json(new { fromMVC = json }); } 

Il motore di routing MVC stabilisce che i nomi dei parametri devono corrispondere, poiché è così che sa cosa compilare poiché tutto viene fornito come stringhe al server . L’impianto idraulico MVC cercherà attraverso la porzione di query dell’URL e persino i campi di ricerca in un modulo su un POST per popolare tutti i parametri.

Avere cento modelli non è poi così male per un progetto complesso. Tuttavia, può essere un problema se devi tornare indietro e adattare l’intera applicazione.

Qualunque cosa tu faccia, dovrai assicurarti che i nomi delle tue variabili JavaScript corrispondano a quelli dei tuoi parametri del metodo Action, il che non dovrebbe essere un problema poiché stai scrivendo entrambi i lati.