Je suis un programmeur web novice alors pardonnez-moi si une partie de mon "jargon" n'est pas correcte. J'ai un projet utilisant ASP.NET utilisant le framework MVC3.
Je travaille sur une vue d'administration où l'administrateur modifiera une liste d'équipements. Une des fonctions est un bouton "mise à jour" que je souhaite utiliser jquery pour éditer dynamiquement l'entrée sur la page Web après l'envoi d'un message au contrôleur MVC.
Je présume que cette approche est «sûre» dans un seul cadre d'administration où il y a un problème minimal de désynchronisation de la page Web avec la base de données.
J'ai créé une vue fortement typée et j'espérais transmettre les données du modèle au contrôle MVC à l'aide d'une publication AJAX.
Dans le post suivant, j'ai trouvé quelque chose qui est similaire à ce que je cherche à faire: JQuery Ajax et ASP.NET MVC3 provoquant des paramètres nuls
J'utiliserai l'exemple de code de l'article ci-dessus.
Modèle:
public class AddressInfo
{
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
}
Manette:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Check(AddressInfo addressInfo)
{
return Json(new { success = true });
}
}
script dans View:
<script type="text/javascript">
var ai = {
Address1: "423 Judy Road",
Address2: "1001",
City: "New York",
State: "NY",
ZipCode: "10301",
Country: "USA"
};
$.ajax({
url: '/home/check',
type: 'POST',
data: JSON.stringify(ai),
contentType: 'application/json; charset=utf-8',
success: function (data.success) {
alert(data);
},
error: function () {
alert("error");
}
});
</script>
Je n'ai pas encore eu l'occasion d'utiliser ce qui précède. Mais je me demandais si c'était la «meilleure» méthode pour renvoyer les données du modèle au contrôle MVC en utilisant AJAX?
Dois-je être préoccupé par la divulgation des informations du modèle?
la source
J'ai trouvé 3 façons de mettre en œuvre cela:
Classe C #:
Action:
JavaScript, vous pouvez le faire de trois manières:
1) Chaîne de requête:
Les données ici sont une chaîne.
"Address1=blah&Address2=blah&City=blah&State=blah&ZipCode=blah&Country=blah"
2) Tableau d'objets:
Les données ici sont un tableau de paires clé / valeur:
3) JSON:
Les données ici sont une chaîne JSON sérialisée. Notez que le nom doit correspondre au nom du paramètre dans le serveur !!
la source
data: $('input, textarea, select').serialize(),
pour que le mien fonctionne.Voici comment cela a fonctionné pour moi:
la source
ce que vous avez est très bien - cependant pour enregistrer un peu de frappe, vous pouvez simplement utiliser pour vos données
voir http://www.ryancoughlin.com/2009/05/04/how-to-use-jquery-to-serialize-ajax-forms/ pour plus de détails, la syntaxe est assez basique.
la source
Si vous utilisez MVC 5, lisez cette solution!
Je connais la question spécifiquement appelée pour MVC 3, mais je suis tombé sur cette page avec MVC 5 et je voulais publier une solution pour quiconque dans ma situation. J'ai essayé les solutions ci-dessus, mais elles n'ont pas fonctionné pour moi, le filtre d'action n'a jamais été atteint et je ne pouvais pas comprendre pourquoi. J'utilise la version 5 dans mon projet et j'ai fini avec le filtre d'action suivant:
- Prenez note du
using System.Web.Mvc
etusing System.Web.Mvc.Filters
, pas deshttp
bibliothèques (je pense que c'est l'une des choses qui a changé avec MVC v5. -Ensuite, appliquez simplement le filtre
[ValidateJSONAntiForgeryHeader]
à votre action (ou contrôleur) et il devrait être appelé correctement.Dans ma page de mise en page juste au-dessus,
</body>
j'ai@AntiForgery.GetHtml();
Enfin, dans ma page Razor, je fais l'appel ajax comme suit:
la source
data: $("#the-form").serialize()
?