contrôleur d'appel de l'action à partir .cshtml page avec jquery
Je suis en train d'appeler une action de contrôleur de jquery UI dialog.
Ce que j'ai actuellement est: est-ce
.html("<p><textarea name=\"TextMessage\" id=\"textItems\" rows=\"10\" cols=\"72\" /><br /><br /><input type=\"button\" style=\"float:right;\" id=\"submitData\" onclick=\"Test()\" value=\"Submit\" /></p>");
Le script que j'utilise pour appeler le contrôleur d'action est celui-ci:
<script type="text/javascript">
function Test() {
$ajax({
url: '<%= Url.Action("GetData", "Report") %>',
success: function (data) {
alert(data);
}
});
};
</script>
Et le contrôleur de l'action est: est-ce
[HttpGet]
public JsonResult GetData()
{
return Json("success", JsonRequestBehavior.AllowGet);
}
Je voudrais savoir si je fais quelque chose de mal, je suis en train d'essayer d'obtenir que cela fonctionne pour quelques heures maintenant, mais sans succès.
Quand je suis en train directement à démarrer le contrôleur via http://localhost:1322/Report/GetData il fonctionne très bien, cela signifie que le script n'est pas correctement configuré.
Je vous remercie tous de l'aide.
Merci d'avance, Laziale
- Si vous êtes de retour JSON, vous devez définir le dataType: 'json' propriété. Vous devez également inclure et "error: function(..." dans votre appel ajax.
- Il semble qu'il vous manque le crochet de fermeture sur le
Test
fonction, mais c'est peut être juste une faute de frappe. - J'ai mis à jour la fonction de test, voir si c'est ok, ne pas faire quelque chose d'aussi bien
- Est-il possible de me donner un exemple, qui m'aiderait beaucoup. Merci à l'avance
- Quand vous dites que vous êtes en mesure de "démarrer le contrôleur directement," voulez-vous dire en accédant à l'URL (dans un navigateur), ou voulez-vous dire qu'il fonctionne si vous définissez cette URL comme la
url
paramètre de l'appel AJAX? Avec votre montage, vous avez maintenant un point-virgule de fin après le crochet fermant surTest
, par la manière. - en accédant à l'URL dans un navigateur. Mis à jour le script maintenant, même résultat
- Il semble qu'il peut en effet être un problème avec votre boîte de dialogue, et non pas le script lui-même. Si vous définissez un point d'arrêt à la
Test
fonction dans un débogueur JavaScript est-il touché? Avez-vous des erreurs de JavaScript? Pouvez-vous expliquer la boîte de dialogue code? - Vérifiez votre console javascript ou d'installer Firebug et de débogage du javascript. Vous verrez ce qui se passe
- Une erreur que je vois dans votre exemple, c'est que vous êtes absent de la
.
dans$.ajax
. Vous devez obtenir de l'erreur$ajax is not defined
.
Vous devez vous connecter pour publier un commentaire.
Parce que vous êtes à l'appel d'une méthode d'action qui est de retour d'une
json
objet que vous pouvez utiliser le jQuery.getJSON() méthode.alert("")
sur la première ligne de laTest()
fonction, est-il de pop-up lorsque vous cliquez sur le bouton?getJSON()
maintenant correct? Êtes-vous sûr que vous avez inclusjQquery
dans votre page? Vous pouvez le vérifier enalert($)
qui devrait alerter une fonction.razor
moteur d'affichage, alors vous devez utiliser la syntaxe@this.Url.Action("GetData", "Report")
pour la génération de l'URL. Vérifiez la source pour voir ce qui est effectivement être générés pour l'URL.razor
moteur d'affichage, vous aurez besoin de changer votre syntaxe.Vous devriez essayer:
MVC va ajouter automatiquement "Contrôleur" à la fin de la deuxième paramètre lorsqu'il est à la recherche pour le contrôleur.
Edit:
Ce code peut fonctionner:
Edit 2:
Changé d'utiliser la syntaxe Razor pour que ce code fonctionne avec Rasoir/MVC3.
.
dans$.ajax
contentType: "application/json; charset=utf-8"
ligne.[HttpGet]
sur votre contrôleur de l'action.[HttpGet]
sur le contrôleur de l'action? Si c'est le défaut que je ne suis pas au courant de toute raison que cela ne dérange en rien.HttpGet
n'est pas nécessaire. Bien que l'ajout deHttpGet
à une action ne sera pas nuire à quoi que ce soit, c'est le comportement par défaut d'une action afin de répondre àGET
demandes.Vous êtes en utilisant MVC-2 de la syntaxe d'Url.D'Action. Cela devrait fonctionner:
Vous pouvez essayer jsaction trop:
http://jsaction.codeplex.com
Nous pouvons appeler la méthode du Contrôleur à l'aide de Javascript /Jquery très facilement comme suit:
Supposons que la suite est le Contrôleur de la méthode à appeler renvoyer un tableau de certains objets de la classe. La classe est 'A'
Suivant est le type complexe (classe)
Maintenant c'était son tour à l'appel ci-dessus, la méthode du contrôleur par JQUERY. Suivant est la fonction Jquery pour appeler la méthode de contrôleur.
Au-dessus de fonction Jquery 'callControllerMethod' nous développons la méthode du contrôleur url et le mettre dans une variable nommée 'strMehodUrl" et appelez getJSON méthode de Jquery API.
receieveResponse est la fonction de rappel de la réception de la réponse ou de la valeur de retour de la les contrôleurs de la méthode.
Ici, nous avons fait de l'utilisation de JSON , puisque nous ne pouvons pas faire usage de la classe C# de l'objet
directement dans la fonction javascript , donc nous avons converti le résultat (arr) dans la méthode du contrôleur en objet JSON comme suit:
Json(arr , JsonRequestBehavior.AllowGet);
et retourné l'objet Json.
Maintenant en fonction de rappel du Javascript /JQuery, nous pouvons faire usage de cette résultante d'objet JSON et de travailler en conséquence pour afficher les données de réponse sur l'INTERFACE utilisateur.
Pour plus de détails cliquez ici