J'ai créé une application Web dans ASP.NET MVC et j'essaie d'appeler un contrôleur via Javascript AJAX. Dans Jquery, nous pouvons envoyer un objet json que MVC Model Binder essaie automatiquement de créer un objet .NET et de passer dans le contrôleur comme argument.
Cependant j'utilise un web workers dans lequel jquery ne peut pas être utilisé. Je fais donc l'appel AJAX via l'objet xmlhttprequest Vanilla. Existe-t-il un moyen d'envoyer l'objet Json via cette méthode?
J'ai utilisé la méthode d'envoi de xmlhttprequest mais l'objet modèle est aussi nul dans le contrôleur :(
Vous devriez simplement pouvoir utiliser JSON2 pour le stringifier et définir le Content-Type
en-tête à application/json
lorsque vous faites le post.
http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js
Vous feriez quelque chose comme:
var xhr = new XMLHttpRequest();
xhr.open('POST', '/Controller/Action');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
}
xhr.send(JSON.stringify(myData));
Voici un exemple. Il suppose que vous utilisez ASP.NET MVC 3.0 qui a un JsonValueProviderFactory
intégré. Si ce n'est pas votre cas, vous pouvez consulter ce billet de blog .
Voir le modèle:
public class MyViewModel
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
Manette:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult SomeAction(MyViewModel model)
{
return Content("success", "text/plain");
}
}
Vue:
<script type="text/javascript">
var http = new XMLHttpRequest();
var value = '{ "prop1": "value 1", "prop2": "value 2" }';
// It would be better to use JSON.stringify to properly generate
// a JSON string
/**
var value = JSON.stringify({
prop1: 'value 1',
prop2: 'value 2'
});
**/
http.open('POST', '/Home/SomeAction', true);
http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
http.setRequestHeader('Content-Length', value.length);
http.onreadystatechange = function () {
if (http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(value);
</script>