none
Différence de remplissage d'objet json et interprétation VB.NET RRS feed

  • Question

  • Bonjour,

    D'habitude j'utilise cette méthode pour remplir un objet sous js

    d =  { champ1: "toto", champ2: "tata" };
    $.ajax({
                type: "POST",
                url: XXXX;aspx/MaFonction,
                data: "{MesDonnees:" + JSON.stringify(d) + "}",
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                success:...
                error:...
            });
    <Services.WebMethod()> _
        Public Shared Function MaFonction(ByVal MesDonnees As MaClass) As Retour
           dim champ1 = MesDonnees.champ1 
            ...
        End Function

    ça marche nickel.

    Mais là, je dois constituer un objet javascript de manière dynamique.
    J'explique plus en détail.
    Pour le moment, je constitue un tableau automatiquement à partie d'une class. 
    Je souhaite y intégrer l'ajout d'enregistrement dans ce tableau dynamique.

     function GetParamTableFullOption() {
            var Filtre = $('#FiltreGeneral' ).val(); 
            return {  FiltreGeneral: Filtre, TaillePage:  $('#Pied > tfoot > tr > td #lstPageSize').val(), PageEnCours: document.location.href };
        }
    	
    function AddRowTableFullOption(nameW) {
    	var AddCol = {}; var Ok = true; if (ClePrimaire != null) { AddCol [ClePrimaire] = ''; }
    	$.each($('#' + nameW + 'Entete > thead > tr:eq(1)')[0].cells, function (index, value) {
    		var Value= $.trim($('#txtbox' + index).val());
    		AddCol[cols[index].SQLName] = Value;
    	});
    
    	var myDatas = { enr: AddCol, OptionEnCours: GetParamTableFullOption() };
    	$.ajax({
    		type: "POST",
    		url: URLAdd,
    		data: "{MesDonnees:" + JSON.stringify(myDatas) + "}",
    		contentType: 'application/json; charset=utf-8',
    		dataType: "json",
    		success: function (msg) { ... },
    		error: function () { ... }
    	});
    }

    OptionEnCours est un objet constitué classiquement selon la 1ere méthode de mon post
    Côté VB, OptionEnCours est bien reconnu comme une class, mais enr comme une dictionnaire (key=nom de ma colone et value:valeur)
    Les valeur sont bonnes et les key sont bien l'ensemble de mes property de ma class

    Sous FireBug, j'envoie :

    {MesDonnees:{
    "OptionEnCours":	{
    "MesOptions":[{"ColName":"Name","Sens":2,"Search":""},
    {"ColName":"Major","Sens":2,"Search":""},
    {"ColName":"Sex","Sens":2,"Search":""},
    {"ColName":"English","Sens":2,"Search":""},
    {"ColName":"Japanese","Sens":2,"Search":""},
    {"ColName":"Calculus","Sens":2,"Search":""},
    {"ColName":"Geometry","Sens":2,"Search":""}
    ],
    "FiltreGeneral":"",
    "TaillePage":"10",
    "NumPage":"1",
    "PageEnCours":"http://localhost:57436/TableFullOptionPlugin/TFOPlugin.aspx"
    },
    "enr":	{
    "Id":"",
    "Name":"aaa",
    "Major":false,
    "Sex":"1",
    "English":"",
    "Japanese":"",
    "Calculus":"",
    "Geometry":""
    }
    }
    }

    Donc les 2 méthode ne donne pas la même chose visiblement. C'est quoi la différence?
    et comment faire en js pour que le vb l'interprète comme une classe?


    Merci de votre aide


    http://www.yannickingenierie-informatique.fr/




    • Modifié totobrowny jeudi 18 septembre 2014 10:04
    jeudi 18 septembre 2014 09:15

Réponses

  • En fait je viens de trouver 2 erreurs :

    1/ Sous fireBug, j'ai récupérer le message d'erreur quand je faisait l'envoi vers ma fonction VB avec la class que j'attendais. Erreur sur Int32 ... et là je viens de voir que pour faire un test rapido, je n'avais pas rempli les champs integer ... donc envoi "" ce que VB n'a pas aimé.

    2/ Ma class attendue contenait des fonctions ... sauf qu'en désérialisant VB n'a pas retrouvé ses fonctions ... j'ai donc déporté mes fonctions

    et ça marche


    http://www.yannickingenierie-informatique.fr/

    • Marqué comme réponse totobrowny jeudi 18 septembre 2014 12:49
    jeudi 18 septembre 2014 12:49

Toutes les réponses

  • Bonjour,

    Avec le code suivante :

    var AddCol = {}; var Ok = true; if (ClePrimaire != null) { AddCol [ClePrimaire] = ''; }
    	$.each($('#' + nameW + 'Entete > thead > tr:eq(1)')[0].cells, function (index, value) {
    		var Value= $.trim($('#txtbox' + index).val());
    		AddCol[cols[index].SQLName] = Value;
    	});

    Vous créez un tableau... AddCol est donc un tableau de clé / valeur.

    Ce que vous envoyez via FireBug c'est un objet contenant des propriétés JavaScript :

    "enr":	{
    "Id":"",
    "Name":"aaa",
    "Major":false,
    "Sex":"1",
    "English":"",
    "Japanese":"",
    "Calculus":"",
    "Geometry":""
    }

    Dans votre service Web, votre MaClass accepte un tableau ou un objet pour les enregistrements ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    jeudi 18 septembre 2014 10:47
    Modérateur
  • En fait je viens de trouver 2 erreurs :

    1/ Sous fireBug, j'ai récupérer le message d'erreur quand je faisait l'envoi vers ma fonction VB avec la class que j'attendais. Erreur sur Int32 ... et là je viens de voir que pour faire un test rapido, je n'avais pas rempli les champs integer ... donc envoi "" ce que VB n'a pas aimé.

    2/ Ma class attendue contenait des fonctions ... sauf qu'en désérialisant VB n'a pas retrouvé ses fonctions ... j'ai donc déporté mes fonctions

    et ça marche


    http://www.yannickingenierie-informatique.fr/

    • Marqué comme réponse totobrowny jeudi 18 septembre 2014 12:49
    jeudi 18 septembre 2014 12:49