Exemple appel AJAX à un ASP.NET Base de Rasoir Page
J'ai trouvé des exemples de plusieurs gestionnaires sur une page et de la convention d'affectation de noms (c'est à dire OnPostXXX) et "asp-post-hanlder' étiquette de l'expert. Mais comment puis-je appeler l'une de ces méthodes à partir d'un appel AJAX.
J'ai un vieil exemple typique d'MVC vue et le contrôleur, mais comment est-ce de travailler avec une lame de Rasoir Page?
Par exemple si je prends l'application de base et de modifier le Sujet.cshtml page à la suivante:
@page
@model AboutModel
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@Model.Message</h3>
<input type="button" value="Ajax test" class="btn btn-default" onclick="ajaxTest();" />
@section Scripts {
<script type="text/javascript">
function ajaxTest() {
console.log("Entered method");
$.ajax({
type: "POST",
url: '/About', //<-- Where should this point?
contentType: "application/json; charset=utf-8",
dataType: "json",
error: function (xhr, status, errorThrown) {
var err = "Status: " + status + " " + errorThrown;
console.log(err);
}
}).done(function (data) {
console.log(data.result);
})
}
</script>
}
Et sur la page de votre modèle Sur.cshtml.cs
public class AboutModel : PageModel
{
public string Message { get; set; }
public void OnGet()
{
Message = "Your application description page.";
}
public IActionResult OnPost() {
//throw new Exception("stop");
return new JsonResult("");
}
}
La OnPost n'est pas appelée à partir de l'appel Ajax.
- Que voulez-vous faire? Pouvez-vous montrer votre point de vue?
- Il n'y a pas une 'Vue' juste un Rasoir Page. J'ai élargi l'exemple.
- docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/... @page rend le fichier dans un MVC action - ce qui signifie qu'il gère les demandes directement, sans passer par un contrôleur. ... Les associations des chemins d'URL pour les pages sont déterminées par la place de la page dans le système de fichiers. Le tableau suivant montre un Rasoir chemin d'accès de Page et l'URL correspondante: nom de Fichier et chemin d'accès correspondant à l'URL /Pages/Index.cshtml / ou /Index /Pages/Contact.cshtml /Contact /Pages/Store/Contact.cshtml /Store/Contact /Pages/Boutique/Index.cshtml /Magasin ou /Store/Index
Vous devez vous connecter pour publier un commentaire.
La AntiForgery Jeton doit être ajouté et il doit y avoir un élément de formulaire sur la page.
dans votre Démarrage.Cs
Ajouter cette avant que les services.AddMvc()
thenn dans votre ajax, changement:
ensuite dans votre méthode, ajouter
Sur le cshtml page envelopper le bouton dans un formulaire ou pas AntiForgery cookie sera ajouté.
Veuillez consulter cette section de la documentation
https://docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/?tabs=visual-studio
/Pages/Index.cshtml cartes /ou /Index
/Pages/Contact.cshtml cartes /Contact
Tout fonctionne bien, mais certaines modifications doivent être apportées:
1)Ouvrez Le Démarrage.cs:
2)Ouvrir Le Contrôleur HomeController.cs:
3)Ouvert Sur.cshtml:
Il convient de noter que "onPost" a été ajouté à l'intérieur de la commande, de manière à AJAX le bon "url" doit être indiqué. Alors:
La réponse qui fonctionne pour moi. Je voudrais seulement ajouter que si nous avons des méthodes sur la page comme:
Ensuite, il convient de spécifier le nom du gestionnaire dans l'url:
Après avoir regardé les réponses ci-dessus, je suis JSON, ajax pour travailler avec .NET de Base 2.1 Rasoir pages à l'aide de Visual Studio 2017 Aperçu 2:
De démarrage.cs
PostJson.cshtml
PostJson.cshtml.cs
Navigateur
http://localhost:44322/postJson
Solution retenue a travaillé dans le local de développement de la machine, mais a ensuite été déployée dans un serveur Debian derrière Nginx reverse proxy (introuvable erreur 404).
C'est un exemple de travail avec les données de la charge utile:
VS 2017; .Net Core 2.2 Rasoir Pages; jQuery 3.3.1