Comment ajouter l'ensemble du modèle à formdata et l'obtenir dans MVC

Comment puis-je passer un objet modèle ensemble entier via formdata et le convertir en type de modèle dans le contrôleur?

Voici ce que j'ai essayé!

Partie JavaScript:

model = {
             EventFromDate: fromDate,
             EventToDate: toDate,
             ImageUrl: imgUrl,
             HotNewsDesc: $("#txthtDescription").val().trim(),
        };
formdata.append("model",model);

Ensuite, passez-le à travers AJAX, ce sera une chaîne, et si je vérifie la valeur de Request.Form["model"] le résultat sera le même, c'est-à-dire qu'il sera reçu comme chaîne et la valeur sera "[object object]"

Existe-t-il un moyen de passer le modèle à travers formdata et de le recevoir dans le contrôleur?

47
demandé sur River 2015-03-27 08:03:48

2 réponses

Si votre vue est basée sur un modèle et que vous avez généré les contrôles à l'intérieur des balises <form>, vous pouvez sérialiser le modèle à FormData en utilisant

var formdata = new FormData($('form').get(0));

Cela inclut tous les fichiers générés avec <input type="file" name="myImage" .../>

Et postez - le en utilisant

$.ajax({
  url: '@Url.Action("YourActionName", "YourControllerName")',
  type: 'POST',
  data: formdata,
  processData: false,
  contentType: false,         
});

Et dans votre contrôleur

[HttpPost]
public ActionResult YourActionName(YourModelType model)
{
}

, Ou (si votre modèle n'inclut pas de propriété pour HttpPostedFileBase)

[HttpPost]
public ActionResult YourActionName(YourModelType model, HttpPostedFileBase myImage)
{
}

Si vous souhaitez ajouter des informations supplémentaires qui ne sont pas dans le formulaire, vous pouvez les ajouter en utilisant

formdata.append('someProperty', 'SomeValue');
67
répondu Stephen Muecke 2015-03-27 05:08:22

Si vous souhaitez envoyer des données de formulaire en utilisant Ajax.C'est la façon d'envoyer

var formData = new FormData();

//File Upload
   var totalFiles = document.getElementById("Iupload").files.length;


for (var i = 0; i < totalFiles; i++) {
    var file = document.getElementById("Iupload").files[i];

    formData.append("Document", file);
}

formData.append("NameCode", $('#SelecterID').val());
formData.append("AirLineCode", $('#SelecterID').val());


$.ajax({
        url: "/Controller/ActionName",
        type: "POST",
        dataType: "JSON",
        data: formData,
        contentType: false,
        processData: false,
        success: function (result) {
    }
})
15
répondu user3824027 2016-05-02 04:45:04