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 :

Pas tout compris à l'utilisation du viewstate


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Pas tout compris à l'utilisation du viewstate
    Bonjour à tous.

    Je voudrais utiliser le ViewState mais je crois que j'ai du louper un épisode en lisant la MSDN.

    Alors voilà, j'ai une page avec deux ASCX dedans. L'un est un formulaire de recherche, l'autre contient un GridView qui va se nourrir d'une requête.

    Sur le click du bouton du formulaire je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ViewState("rq") = "EXEC dbo.IMMO_SelectionBienRecherche " & ddlTypeBien.SelectedValue & ", " & ddlTypeTransac.SelectedValue & ", " & PrixMini & ", " & PrixMaxi & ", " & PieceMini & ", " & PieceMaxi & ", " & dacVille.IdVille
            Response.Redirect(GetPage("Accueil", enTypeRetour.Lien))
    En gros, je fabrique ma requête SQL de toute pièce et je redirige vers la page qui contient le Composant ASCX du GridView. Dans le cas présent il se trouve que c'est la même page, mais cela ne sera pas toujours le cas.

    Et dans le composant ASCX qui contient le GridView je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    With sdsListeBien
                .SelectCommandType = SqlDataSourceCommandType.Text
                If ViewState("rq") <> "" Then
                    .SelectCommand = ViewState("rq")
                Else
                    .SelectCommand = "EXEC dbo.IMMO_SelectionBienDefault"
                End If
            End With
    J'ai une Procédure Stockée qui me remonte les 10 biens les plus récents par défaut (quand on arrive sur le page d'accueil par exemple) sinon, on prend les critères envoyés précédement et on envoi la requete fabriquée pour renvoyer les biens selon les critères.

    Sauf que dans mon cas, j'ai du louper un truc car je n'ai jamais de retour de la requête.

    Pouvez vous m'aider ?

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    C'est le Response.Redirect qui provoque un chargement de la page (et une remise a 0 du viewstate) car ce n'est pas un postback.

    Si c'est une communication inter-pages, tu peux passer par une variable session (qui ne sera pas remise à 0 par le changement de page).

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    Ah, d'accord, je comprends.

    Mais j'aurais préféré une méthode moins "long terme" que la variable de session. Va faloir la gérer et ça m'embête un peu.
    Du temps de ASP 3.0 j'aurais pu utiliser un truc du genre Request.Form, mais là, en .NET, je sais pas quoi utilser.

    Une idée ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 47
    Par défaut
    J'utilise une solution un peut "bourrin" pour sauvegarder les requêtes SQL, j'ai balancé un asp:label avec visibility à False, et quoi que tu fasse sa propriété Text est toujours disponible.

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.
    Ton label, tu le mets dans quel composant ?
    Et une fois qu'il est dans le composant, tu recupère comment sa propriété Text ?

    Si je le mets dans le composant où se trouve le formulaire, je ne sais pas récupérer son Text depuis le composant du GridView et s'il est dans le composant du GridView, je ne sais pas comment mettre la requête dans le Text.

    @hwoarang : j'ai réfléchi un peu plus, mais vu l'heure, je testerais demain matin. Si je ne fais pas de Response.Redirect, ça va bien déclcneher un Post Back ?
    Et donc, ça va bien charger le truc dans le ViewState et donc je vais pouvoir récupérer ça dans le composant du GridView et récupérer aussi le remplissage des champs du formulaire, j'ai bon là ?

    Reste à ce que je trouve le moyen de rester toujours sur la même page, donc ne pas mettre le composant de formulaire sur d'autre page.
    Si l'idée tiens la route, je peux suivre cette piste.

  6. #6
    Membre éclairé Avatar de PatStan17
    Homme Profil pro
    Chef de projet / Développeur
    Inscrit en
    Décembre 2008
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2008
    Messages : 307
    Par défaut Conception
    A mon avis c'est une erreur de mettre du SQL dans une page web ....Il fait faire des objets qui s'adresse a une couche DAL et DAO ....il faut reserverver le code des pages web à la présentation ...


    P.JEAN

  7. #7
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Ton label, tu le mets dans quel composant ?
    Et une fois qu'il est dans le composant, tu recupère comment sa propriété Text ?
    Cette technique ne marchera pas sur des pages différentes.

    Citation Envoyé par zooffy Voir le message
    @hwoarang : j'ai réfléchi un peu plus, mais vu l'heure, je testerais demain matin. Si je ne fais pas de Response.Redirect, ça va bien déclcneher un Post Back ?
    Et donc, ça va bien charger le truc dans le ViewState et donc je vais pouvoir récupérer ça dans le composant du GridView et récupérer aussi le remplissage des champs du formulaire, j'ai bon là ?
    Si ton bouton est configuré pour declancher un postback, oui (c'est le comportement par defaut des boutons asp).

    Citation Envoyé par zooffy Voir le message
    Reste à ce que je trouve le moyen de rester toujours sur la même page, donc ne pas mettre le composant de formulaire sur d'autre page.
    Si l'idée tiens la route, je peux suivre cette piste.
    2 solutions en vrac (qui valent ce qu'elles valent) :
    1 Methodes bourrine (et moche) : passer par un parametre de la page => adresse de la page : default.aspx?req=SELECT... Bien sur, tu pourras passer par un encodage quelconque pour ne pas passer directement une requete. Mais c pas terrible
    2 Encapsuler tes pages. L'idée, c'est que ce soit la meme page qui affiche les différents ecrans de maniere dynamique. Comme ca, les changements se feront sur postback et le viewstate sera maintenu. Mais ca peut necessiter pas mal de modifs...


    Bref, à mon avis, la solution la plus simple qui necessite pas trop de boulot reste la variable session.

Discussions similaires

  1. [AJAX] Transmission de variable, j'ai pas tout compris
    Par msg_dracula dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/07/2007, 00h15
  2. Réponses: 1
    Dernier message: 28/03/2007, 19h13
  3. je n ai pas tout compris dans le script
    Par letigre dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2006, 10h44
  4. bouton et bitmap - a pas tout compris
    Par mat_monroe dans le forum MFC
    Réponses: 7
    Dernier message: 20/06/2006, 15h25

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