10
votes

Jquery + asp.net mvc, passage de flotteur

Je travaille récemment avec MVC et j'ai rencontré un problème étrange tout en essayant d'envoyer une demande à mon contrôleur à l'aide d'Ajax. J'utilise JQuery (version 1.3.2) qui est venue directement avec MVC, j'essaie d'envoyer une telle demande AJAX:

class DoubleModelBinder : IModelBinder
{
    #region IModelBinder Members

    public object BindModel(ControllerContext controllerContext, ModelBindingContext    bindingContext)
    {
        string numStr = bindingContext.ValueProvider[bindingContext.ModelName].AttemptedValue;
        double res;

        if (!double.TryParse(numStr, System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out res))
        {
            if (bindingContext.ModelType == typeof(double?))
                return null;
            throw new ArgumentException();
        }

        if (bindingContext.ModelType == typeof(double?))
            return new Nullable<double>(res);
        else
            return res;
    }

    #endregion
}


4 commentaires

J'ai essayé de choisir une application de test pour voir si je pouvais recréer le problème initial (Cut'n'pasted à la fois votre appel JQuery et la signature d'action) mais tout fonctionne bien pour moi. Le paramètre flotteur a toujours la valeur. .... étrange hein


Ils travaillent pour moi. Utilisez un outil HTTP comme Fiddler ou httpWatch pour voir si votre message AJAX est correctement formé.


C'est étrange ... je vais examiner de plus près cela que, peut-être que je découvrirai ce qui ne va pas.


+1 pour une question bien écrite, ainsi que pour avoir publié la solution pour d'autres personnes. C'était utile pour moi. Merci.


5 Réponses :


5
votes

Faire un liant de modèle de flotteur. Qui peut tirer la valeur appropriée de la collection de formulaires, analyser et le renvoyer comme argument


0 commentaires

0
votes

Edit: Avez-vous besoin d'utiliser JQuery Post? Y a-t-il un moyen de pouvoir utiliser le support intégré pour AJAX pour créer un lien et quel est le résultat dans ce cas? EG

[AcceptVerbs( HttpVerbs.Post)]
public void OpenTrade(int dollars, int cents)


2 commentaires

AD 1. N'oubliez pas que j'ai un numéro à l'intérieur de JavaScript, pas à l'intérieur du code C #, l'ajout de 'F' ne voudrait pas aider. Ad 2. C'est une solution, mais c'est encore moins élégant que d'obtenir une chaîne imho (j'ignore le fait que je fais de la valeur de l'argent en tant que numéro de flotteur, qui n'est presque jamais une bonne idée, mais dans ce cas, je savoir ce que je fais)


Annonce modifier. J'ai plutôt besoin d'une logique entièrement mise en œuvre dans JS, car je ne fais que mettre quelques liens avec les requêtes Ajax, en plus, je ne crois pas que le problème est sur le côté JS, qui ne fait que passer des données à MVC dans un format donné.



0
votes

Avez-vous vérifié pour voir quelle est la réponse JSON du serveur? Je remarque que vous n'avez pas encapsulé votre variable de prix avec des guillemets doubles, de sorte que votre message sur le serveur ressemblera à: xxx pré>

Je ne sais pas si cela sera un problème avec une seule donnée paramètre, mais je soupçonne ce que vous voulez réellement qu'il ressemble est P>

"{'price':1.5}"


1 commentaires

Je ne pense pas que ce soit le cas, quand j'ai fait ce que vous m'avez conseillé, tout a cessé de travailler :), comme si j'ai essayé de passer d'autres données, qui sont des chaînes - elles n'étaient pas désérialisées par MVC du tout.



2
votes
{ price: '1,5' } 
should be fine.

1 commentaires

J'ai rencontré de nombreux problèmes similaires. Utilisation de la chaîne et la conversion du contrôleur est la plus simple, parfois même la plus élégante et la plus élégante, de le faire fonctionner.



-2
votes
UpdateImage(string rotationAngle)
        {
            double d;
            double.TryParse(rotationAngle, System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture, out d);

0 commentaires