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 :

Rendu de page partiel


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut Rendu de page partiel
    Bonjour,

    J'ai pour objectif la création d'un site internet en VB/ASP.NET. Cependant, l'accès aux données est quelque peu long je souhaitais donc afficher un message d'attente.
    La problématique de ce souhait, est qu'il faut soit :
    - Affiché uniquement les éléments nécessaires (rendus partiels) : la page maître ainsi que le message d'attente
    - Reussir à effectuer du code-behind après le rendu ! Or ce n'est pas ce qu'il y a de plus facile, sachant que toutes les fonctions préconçues en VB.NET sont toutes les étapes précédant le rendu (Init, Load, PreRender ..).

    De plus, la contrainte est que je ne dois pas utilisé de JavaScript ainsi que du Ajax !

    Déroulement souhaité :
    On ouvre la page internet, on vois la page maître qui s'affiche avec le message d'attente, puis on charge les données et quand celles-ci sont chargés, elles s'affichent automatiquement à l'aide d'un DataBind sur la GridView.

    J'ai tout d'abord cherché sur les timers, qui permettent d'écrire des fonctions en code-behind s'executant après le rendu, car le cycle de vie de la page a été jusqu'à son terme, et une fois l'interval fini, recommence le cycle de vie, et donc le page_load. Cependant, le timer en VB.NET / ASP est vraiment une m**** ou alors je ne sais pas m'en servir, toutefois, je pense avoir fait un algorithme plutôt correct, donc j'abandonne le timer !!

    Je viens donc de trouvé le rendu de page partiel qui permet d'afficher seulement un ou plusieurs bout de code que l'on a sélectionné dans la page asp à l'aide des balise UpdatePanel, qui a à voir avec ScriptManager.
    Cependant, pour pouvoir bénéficié de ce rendu partiel, il faut utilisé un script JavaScript ?
    N'y a-t-il pas un autre moyen d'utilisé le rendu de page partiel ?
    Ou alors une autre méthode qui me permettrais d'attendre mon objectif ?

    Je vous remercie à l'avance de vos réponses.

    [EDIT]
    Peut-être que la méthode Update du contrôle UpdatePanel peut reglé mon problème.
    J'attend de voir si ça marche, et si mon probème est résolu, je changerais l'état de ce post.

    Par curiosité, je suis toutefois ouvert à toutes vos suggestions ou conseilles...
    [/EDIT]

  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
    De plus, la contrainte est que je ne dois pas utilisé de JavaScript ainsi que du Ajax !
    L'UpdatePanel est un contrôle qui génère du javascript pour faire de l'ajax

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Tout d'abord, merci de ta réponse rapide et je me demandais si on ne pouvais pas utilisé la commande :
    UpdatePanel1.Update()

    Exemple

    Cependant, je ne sais pas si ce contrôle est ce que je necessite réellement.

    Voici en gros mon algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If IsPostBack Then
            If (/* Connexion à la BDD */) Then
                Label2.Text = ": Tentative de connexion à la BDD"
            Else
                Timer1.Interval = 30000
                Timer1.Enabled = True
                Label2.Text = ": Erreur lors de la connexion à la base de données"
        End If
        Else
            Timer1.Interval = 1000
            Timer1.Enabled = True
        End If
    End Sub
    Cependant, comme dit plus haut, le Timer étant un objet plutôt instable, je préfère utilisé une autre méthode.

    Quelqu'un connaitrait-il un Event ou une méthode permettant d'afficher le rendu, et ne pas chargé les données depuis la BDD ...

    [EDIT]
    Finalement, je ne sais pas si la méthode du UpdatePanel va fonctionné.
    En effet, je voulais que dès l'ouverture de la page, l'on obtienne le rendu avec message d'attente, puis que l'on charge les données, cependant, afin d'active l'affichage partiel, il faut un contrôle, or je ne vois pas de contrôle de fin de rendu. =X
    Ou alors, n'existe-t-il point un contrôle de fin de rendu ?
    [/EDIT]

  4. #4
    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
    Je comprends pas trop ce que tu racontes.
    Pour moi, ce que tu cherches à faire est impossible sans javascript

  5. #5
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Mon objectif est que j'obtienne en ouvrant la page :
    -Une première publication permettant d'affiché un message d'attente
    -Une fois affiché, on charge les données dans la GridView (si possible à l'aide d'un PostBack)
    -Si tel est le cas, affiché un message d'erreur et une tentative de reconnexion 30 secondes plus tard en cas d'erreur lors de la connexion à la BDD.

    Or VB.NET est un language que je dirais de "publication". C'est-à-dire, toutes les fonctions proposés ormis les contrôles (e.g. Button) se trouves avant le rendu de la page ! Donc pas moyen (enfin, pas trouvé en tout cas ) de m'afficher la page avec mon texte d'attente et SANS chargement de la BDD (qui est effectué à partir d'une fonction intermédiaire appelé dans Page_Load), puis, seulement après publication de la page, on charge la BDD.

    Voilà, après que ce soit avec la technique de rendu de page partiel ou autre chose, cela ne m'importe guerre, tant que le code est propre et sans bavure.

    Le meilleur moyen que j'ai trouvé, reste les timers, cependant, pour les requêtes SQL qui sont trop longues a s'executé, je n'arrive pas à ARRETER le timer. Toutefois, cette méthode marche sur pas mal de page, seules quelques pages ne fonctionnent pas (hypothèse : la requête est trop longue malgré le fait que j'arrête le Timer avant d'appeler ma requête).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then               //Si 1ere fois
            Label2.Visible = True              //Message d'attente
            Timer1.Enabled = True           //Active le timer
        Else
            Timer1.Enabled = False          //Désactive le timer
            If (/* Appel BDD */) Then      //Appel la BDD AVEC timer "ARRETER"
                Label2.Visible = False
            End If
        End If
    End Sub
    Et pourtant j'obtiens une boucle infini !

    Cependant, vous pouvez testez chez vous, ce code marcheras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then               //Si 1ere fois
            Label2.Visible = True              //Message d'attente
            Timer1.Enabled = True           //Active le timer
        Else
            Timer1.Enabled = False          //Désactive le timer
            Label2.Visible = False
        End If
    End Sub

    Je cherche donc un moyen de pouvoir "reloader" ma page pour récupérer mes données seulement après la (première, mais cela est sans importance) publication, comme je le fais avec le Timer qui me "reload" ma page automatiquement, sauf que ce dernier refuse de s'arrêter !!

  6. #6
    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
    Ton code n'arrête le timer qu'une fois la fonction
    /* Appel BDD */ terminée.
    Donc si cette fonction prend plus de temps que la période de ton timer, alors oui t'as une boucle infinie

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 6

  8. #8
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    J'ai beau avoir tenté de sortir "Appel BDD" de ma struture If pour tenter ton hypothèse, cependant, la boucle infini persiste ...
    Il faut croire que :
    Ton code n'arrête le timer qu'une fois la fonction
    Page_Load terminée.
    Donc si cette fonction prend plus de temps que la période de ton timer, alors oui t'as une boucle infinie
    Sacré timer ...

    Dans tous les cas, je vais me rabattre vers javascript ou ajax.

    Merci de m'avoir lu et répondu. A plus !

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/10/2013, 09h50
  2. Réponses: 0
    Dernier message: 14/05/2010, 23h21
  3. Liste déroulante + chargement partiel d'une page
    Par lamelfa dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/09/2006, 22h29
  4. Sauvegarder page Web + afficher contenu partiel
    Par GoldenEye dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 13/07/2006, 15h19

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