IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Formulaire et HttpModule


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Formulaire et HttpModule
    Bonjour tout le monde !

    Voilà, j'ai un petit soucis impliquant un formulaire dans une page asp.Net et un HttpModule.
    Voici la situation : l'HttpModule en question permet de filtrer l'envoi du formulaire pour récupérer les fichiers envoyés via ce dernier et les sauvegarder. Jusque là tout va bien, les fichiers sont correctement enregistrés.

    La deuxième préoccupation a été de transmettre les autres champs (ceux qui ne sont pas de type file) à la page pour qu'elle puisse les traiter de manière transparente. Là aussi, je les ai bien dans mon "Request.Form", pas de soucis.

    Mon dernier problème est le suivant : lorsque je désactive mon module HTTP, les champs de type textbox, par exemple, se re-remplissent tous seuls avec les données que j'avais entrées avant d'envoyer le formulaire. Par contre, avec le module HTTP activé, cela ne fonctionne plus.

    Je n'ai pas vraiment trouvé de site où l'on m'explique clairement comment ça se fait que les formulaires se re-remplissent automatiquement (je ne fais pas de l'asp.Net depuis longtemps et il y a des points que je n'ai pas encore bien compris...), donc déjà, si quelqu'un pouvait me l'expliquer ou m'indiquer un site, ça serait super ^^
    Et par ailleurs, si quelqu'un a une idée de pourquoi avec le module HTTP cela ne fonctionne plus, ce serait encore mieux

    Je n'ai volontairement pas donné trop de détails parce que je ne sais pas trop quelles informations peuvent être utiles, mais je répondrais de mon mieux aux questions qui seraient nécessaires pour m'aider

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    ViewState?

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai lu des trucs sur le viewstate.
    Seulement, je croyais avoir compris que c'était le champ __VIEWSTATE qui devait contenir l'intégralité des états des champs, or ça me parrait étrange étant donné que la valeur de ce champ ne change pas lorsque je change les données dans les textbox...
    De plus, je transmets bien ce fameux champ __VIEWSTATE à la page...

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Laewella Voir le message
    Et par ailleurs, si quelqu'un a une idée de pourquoi avec le module HTTP cela ne fonctionne plus, ce serait encore mieux
    On peut voir le code de ton module ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    On peut voir le code de ton module ?
    Ce serait difficile, pour deux raisons : d'abord, il est assez volumieux, ensuite, je le fais pour le boulot et je ne peux donc pas diffuser le code comme ça. Je pourrais par contre, extraire juste la méthode qui se charge de retransmettre les champs de type non file après le parsing, ça aiderait ?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Ca aiderait peut être...

    En espérant que le problème soit bien à ce niveau-là.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
            private void AddRequestFields()
            {
                string s_transaction_id = HttpContext.Current.Request[FINISHED_TRANSACTION_KEY];
                NameValueCollection fields = HttpContext.Current.Cache.Get(s_transaction_id + "-" + FINISHED_FIELDS_KEY) as NameValueCollection;
     
                if (fields != null)
                {
                    BindingFlags eFlags             = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
                    Assembly webAssembly            = typeof(HttpRequest).Assembly;
                    Type t                          = webAssembly.GetType("System.Web.HttpValueCollection");
     
                    // Récupérer la référence vers la méthode MakeReadWrite.
                    MethodInfo m                    = t.GetMethod("MakeReadWrite", eFlags);
                    NameValueCollection formFields  = HttpContext.Current.Request.Form;
     
                    m.Invoke(formFields, null);
     
                    foreach (string key in fields)
                    {
                        formFields[key] = fields[key];
                    }
     
                    // Récupérer la référence vers la méthode MakeReadOnly.
                    m = t.GetMethod("MakeReadOnly", eFlags);
     
                    m.Invoke(formFields, null);
                }
            }
    Avant d'en arriver à cette méthode, les champs non file (sous forme d'une NameValueCollection) sont stockés dans le Cache et on les récupère donc à la ligne 4. À noter que les données sont bien là, dans le Resquest.Form, au retour sur la page.

    Si les champs sont là, que le __VIEWSTATE est là et que ça ne fonctionne pas, il doit y avoir quelque chose en plus qui est nécessaire et que j'ai loupé...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est bon, en fait, j'ai trouvé une solution pour que ça fonctionne...
    En fait, je pense que ça vient du fait que, une fois l'analyse du flux terminée, je fais une redirection pour un second passage dans le module HTTP et c'est à ce moment que la fonction AddRequestFields est appelée. Seulement du coup, ma requête n'est plus une requête POST, mais GET.
    Alors, en ajoutant les champs dans la QueryString, ça fonctionne !

    Merci quand même pour votre aide

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Il y a tout de même un problème :

    La longueur maximale d'une QueryString est 255 caractères.

    Donc, avec beaucoup de champs et/ou de grandes valeurs, il risque d'y avoir un gros problème.

    Dans un POST, on peut mettre autant de données qu'on veut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un formulaire sous flash?
    Par ultrakas dans le forum Flash
    Réponses: 5
    Dernier message: 11/01/2005, 18h33
  2. [CR][Access] intégrer un viewer dans un formulaire access
    Par nicolak dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 13/01/2003, 15h52
  3. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59
  4. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 03h51
  5. [CR] Tranfert de formulaire a travers une page HTMl
    Par LIEU dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/09/2002, 08h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo