2
votes

Comment passer des valeurs javascript à aspx c # en utilisant ajax

Je ne trouve pas de moyen de transmettre les valeurs d'un fichier javascript, (que j'ai obtenu d'un fichier html d'un événement onclick), à un fichier aspx.cs.

J'ai essayé d'utiliser le code suivant. Chaque article semble montrer de cette façon mais l'erreur continue d'être appelée, également essayée avec 'type' au lieu de 'method'.

Fichier .js:

    [WebMethod]
    public static string Send(string name)
    {//breakpoint here
        //code
    }

Fichier WebForm.aspx.cs:

//get 'name' variable here
        $.ajax({
                url: 'WebForm.aspx/Send',
                dataType: "json",
                method: 'post',
                contentType: "application/json; charset=utf-8",
                data: { name: name },
                success: msgsuccess,
                error: msgerror
            });

Le code n'atteint jamais le point d'arrêt dans le fichier aspx.cs, donc la valeur du code n'est jamais passée .

Ceci est mon premier message dans le débordement de pile, désolé si quelque chose est mal formaté.


2 commentaires

Appuyez sur F12 dans votre navigateur - des erreurs dans la console? Si vous exécutez AJAX avec l'onglet Réseau ouvert, que voyez-vous?


@TylerRoper J'obtiens cette erreur lorsque j'appuie sur le bouton avec l'événement: localhost: 50301 / WebForm .aspx / Send 401 (non autorisé) . Dans l'onglet réseau, il y a une barre verte qui monte à 60 ms mais je ne peux pas voir en quoi cela est pertinent.


3 Réponses :


1
votes

Vous devez ajouter un contrôle ScriptManager à la page (ou sa MasterPage) et vous assurer que le La propriété EnablePageMethods du ScriptManager est true .

Par exemple, lorsque la page ou sa maquette possède un contrôle ScriptManager comme celui-ci:

PageMethods.Send(name, msgsuccess, msgerror);

puis ajoutez le EnablePageMethods et définissez-la sur true:

<asp:ScriptManager runat="server" EnablePageMethods="true">
        ...
</asp:ScriptManager>

Notez que vous ne pouvez pas ajouter de contrôle ScriptManager à une page alors que sa page maître a déjà un.


De plus, vous pouvez simplifier l'appel de la méthode depuis JavaScript. Vous pouvez simplement utiliser:

<asp:ScriptManager runat="server">
        ...
</asp:ScriptManager>


1 commentaires

Ajout du contrôle ScriptManager, ne semble pas fonctionner. De plus, je ne savais pas où exactement où le mettre, alors j'ai recherché et on m'a conseillé de le placer juste après le contrôle de formulaire, alors je l'ai inséré comme ceci:

...



0
votes

[WebMethod] s parse JSON, vous devez donc envoyer vos données de requête sous forme de chaîne:

$.ajax({
  url: 'WebForm.aspx/Send',
  dataType: "json",
  method: 'post',
  contentType: "application/json; charset=utf-8",
  data: JSON.stringify({ name: name }), // use JSON.stringify here
  success: msgsuccess,
  error: msgerror
});

Tout le reste devrait fonctionner comme prévu.


1 commentaires

J'ai oublié de clarifier que la variable 'nom' est une variable de chaîne, donc ma non utilisation de JSON.stringify



0
votes

Problème résolu:

J'ai vérifié la console (avec F12) comme conseillé par @TylerRope et j'ai obtenu le numéro d'erreur 401 (non autorisé).

Avec cela, j'ai ressourcé pour la bonne réponse de ce message et a résolu l'erreur. Si vous connaissez des effets secondaires que cette solution pourrait causer, vous seriez reconnaissant de les partager.

Merci pour votre aide!


0 commentaires