en passant chaîne json comme paramètre à webmethod
Je suis en train de faire une requête ajax à un webmethod EmailFormRequestHandler
, je peux voir sur le côté client (via firebug) que le statut de la demande est de 200, mais ce n'est pas de frapper le point d'arrêt (première ligne de la webmethod) dans mon webmethod. Tout fonctionnait bien avec le json param était un object
mais avec la façon dont je suis la désérialisation du json j'ai dû changer de chaîne.
js:
function SubmitUserInformation($group) {
var data = ArrayPush($group);
$.ajax({
type: "POST",
url: "http://www.example.com/components/handlers/FormRequestHandler.aspx/EmailFormRequestHandler",
data: JSON.stringify(data), //returns {"to":"[email protected]","from":"[email protected]","message":"sdfasdf"}
dataType: 'json',
cache: false,
success: function (msg) {
if (msg) {
$('emailForm-content').hide();
$('emailForm-thankyou').show();
}
},
error: function (msg) {
form.data("validator").invalidate(msg);
}
});
}
aspx:
[WebMethod]
public static bool EmailFormRequestHandler(string json)
{
var serializer = new JavaScriptSerializer(); //stop point set here
serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
dynamic obj = serializer.Deserialize(json, typeof(object));
try
{
MailMessage message = new MailMessage(
new MailAddress(obj.to),
new MailAddress(obj.from)
);
message.Subject = "email test";
message.Body = "email test body" + obj.message;
message.IsBodyHtml = true;
new SmtpClient(ConfigurationManager.AppSettings["smtpServer"]).Send(message);
return true;
}
catch (Exception e)
{
return false;
}
}
vous dites le code d'état est
correct
200
mais ni l'erreur ni la réussite de rappel des feux?correct
OriginalL'auteur bflemi3 | 2012-01-20
Vous devez vous connecter pour publier un commentaire.
Vous êtes absent le type de contenu dans le jQuery, JSON post:
Voir cet article. Il m'a beaucoup aidé quand j'ai eu un problème similaire:
Utilisation de jQuery pour appeler directement ASP.NET page AJAX méthodes(n'est plus disponible)Vous n'avez pas besoin de configurer le ScriptManager à EnablePageMethods.
Aussi, vous n'avez pas besoin de désérialiser le JSON-objet sérialisé dans votre WebMethod. Laissez ASP.NET le faire pour vous. Modifier la signature de votre WebMethod (remarqué que j'ai ajouté "e-Mail" les mots "de" et "à partir de" parce que ce sont des C# mots-clés et c'est une mauvaise pratique pour le nom des variables ou des paramètres qui sont les mêmes que pour un mot-clé. Vous aurez besoin de changer votre JavaScript de manière à ce que le JSON.stringify() va sérialiser votre chaîne correctement:
c'est effectivement ce que j'ai fait. Ce n'est pas une solution idéale car elle n'est vraiment pas facile à gérer quand j'ai besoin d'ajouter des champs. il peut rapidement devenir hors de contrôle, mais c'est le travail fait pour l'instant. Merci Mario!!
Vous êtes les bienvenus et je suis d'accord avec vous. Je n'ai pas essayé en passant des objets complexes, mais je pense qu'il peut être utile de donner un coup de feu.
en fait je l'ai fait avec une autre méthode web et asp gère à merveille, et bien sûr, beaucoup plus facile à gérer 🙂
salut, j'ai entendu l'utilisation du verbe post est pour manipuler les données, db, donc explorer pour trouver passer dans le même cas de données à rompre par requête get, mais je pense qu'il n'est pas possible. est-ce possible?
OriginalL'auteur Mario J Vargas
Vous voulez dire que vous souhaitez définir un point de rupture?
Ne définissez pas ce point dans firebug. Jeu de point d'arrêt dans VS lui-même. Ensuite, fixez VS pour IIS local.
Par la façon dont, dans votre appel ajax vous définissez trois paramètre, votre webmethod ne prend qu'un. et le nom du paramètre doit être le même.
Le format des données d'attribut dans l'appel ajax est aussi pas bon. Il devrait ressembler à ceci
il doit être encadré dans les'
OriginalL'auteur Sven Bieder
Peut-être ce code permet à quelqu'un:
Je l'utilise tout le débogage lorsque frontend vient en premier.
OriginalL'auteur Антон Бесхмельницкий
Première chose que j'ai remarqué, c'est que vous êtes absent contentType: "application/json; charset=utf-8" dans votre $.ajax. Également ajoutée à votre $.ajax complète de rappel, il retourne jqXHR,textStatus. Je pense que la complète rappel de l'aide parce que textStatus l'une des opérations suivantes (la"réussite", "notmodified", "erreur", "délai d'attente", "abandon", ou "parsererror"). Cela peut vous aider à suivre la question.
OriginalL'auteur Cam