Accueil > Forum > > > > récupérer une variable client coté serveur sans postback
récupérer une variable client coté serveur sans postback
jeudi 4 décembre 2008 à 12:15:51 |
récupérer une variable client coté serveur sans postback

Augustus
|
Bonjour, J'essaye de faire un chat en asp. Le probleme est que je veux le faire sans rafraichir la page à chaque fois. J'ai un timer coté client en javascript qui gère un callback. Cependant, je n'arrive pas à récupérer le contenu de mon textbox (coté serveur) sans passer par un postback( qui celui-ci me fait rafraichir ma page). Je débute en asp et est beaucoup de mal à comprendre la philosophie du truc. Pouvez vous m'aider SVP voici mon code : Chat.aspx <% @PageLanguage="VB"AutoEventWireup="false"CodeFile="Chat.aspx.vb"Inherits="Chat" %><! DOCTYPEhtmlPUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">< htmlxmlns="http://www.w3.org/1999/xhtml">< headrunat="server"><title>Page sans titre</title><scripttype="text/javascript">var interval = "";var i = 5;function startTimer(){ interval = window.setInterval( "tTimer()",1000);} function stopTimer(){ window.clearInterval (interval); interval= "";} function tTimer(){ CallServer( 'Text','');} function ReceiveServerData(arg, context){ document.getElementById( 'Label1').innerText = arg;} </script></ head>< bodyonload="startTimer();"><formid="form1"runat="server"><div><asp:LabelID="Label1"runat="server"Height="416px"Text=""Width="552px"></asp:Label> <br/><br/><asp:TextBoxID="TextBox1"runat="server"AutoPostBack="True"></asp:TextBox><inputid="Button1"type="button"value="Envoyer"onclick="CallServer('Text','')"/></div></form></ body></ html>Chat.aspx.vb Partial Class ChatInherits System.Web.UI.PageImplements ICallbackEventHandlerPrivate _callbackArg AsStringProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.LoadDim cbReference AsStringDim callbackScript AsStringDim cm As ClientScriptManager = Page.ClientScriptcbReference = cm.GetCallbackEventReference( Me, "arg", "ReceiveServerData", "context")callbackScript = "function CallServer(arg, context){" & cbReference & "; }"cm.RegisterClientScriptBlock( Me.GetType(), "CallServer", callbackScript, True)If IsPostBack = FalseThenApplication( "MonTexte") = ""EndIfEndSubPublicSub RaiseCallbackEvent(ByVal eventArgument AsString) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent_callbackArg = eventArgument EndSubPublicFunction GetCallbackResult() AsStringImplements System.Web.UI.ICallbackEventHandler.GetCallbackResultSelectCase _callbackArgCase"time"ReturnMy.Computer.Clock.LocalTime.ToString()Case"mem"Return (My.Computer.Info.AvailablePhysicalMemory / 1024).ToString() & "K"Case"Text"Return (Application("MonTexte"))CaseElseReturn _callbackArgEndSelectEndFunctionProtectedSub TextBox1_TextChanged(ByVal sender AsObject, ByVal e As System.EventArgs) Handles TextBox1.TextChangedApplication( "MonTexte") = Application("MonTexte") & TextBox1.Text & vbCrLfTextBox1.Text = ""EndSubEnd ClassM@le
|
|
vendredi 5 décembre 2008 à 13:52:44 |
Re : récupérer une variable client coté serveur sans postback

ggtry
|
Bonjour,
Lors du callback, tu ne peux pas récupérer côté serveur le texte modifié de ton contrôle textbox à l'aide de textbox.text. Tu as accès côté serveur seulement à l'état de départ de tes contrôles. Autrement dit, si ta textbox est vide au départ, tu récupéreras lors du callback, avec textbox.text, une chaîne vide. Tu ne peux pas non plus attribuer une nouvelle valeur à un contrôle côté serveur de cette manière. Le principe est en fait de récupérer le nouvel état de ton contrôle (le texte de la textbox, par exemple) côté client, avec du javascript, de l'envoyer au serveur, puis de traiter le retour serveur de nouveau côté client avec du javascript. En bref, le callback ne te permet pas côté serveur de récupérer les modifications clients du contrôle, ni de modifier le contrôle : il te faut passer le texte de ton textbox en variable dans CallServer. Dans ton exemple, tu peux par exemple récupérer ainsi la valeur du textbox en javascript, et provoquer le callback, avec ta fonction tTimer :
function tTimer() { var t=document.getElementById("TextBox1").value; CallServer(t,''); }
Côté serveur, tu pourras alors récupérer "t", qui contient la valeur de ta textbox, avec eventArgument, par exemple :
Private valeur As String Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _ Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent valeur = eventArgument End Sub Public Function GetCallbackResult() As String Implements _ System.Web.UI.ICallbackEventHandler.GetCallbackResult Select Case (valeur) Case "essai" Return "quelque chose" Case Else Return valeur End Select End Function
Si tu tapes n'importe quoi dans ta textbox, le label va afficher le contenu de ta textbox. Si tu tapes "essai", il va afficher le message "quelque chose". Bien entendu, c'est un exemple gratuit, puisque pour faire ça, du pur javascript suffirait. C'est utile seulement pour récupérer des données serveur relativement simples sans postback. Si tu veux faire quelque chose de complexe, peut-être devrais-tu plutôt le faire avec de l'Ajax qui va te faciliter la vie...
GGtry
|
|
vendredi 5 décembre 2008 à 14:08:28 |
Re : récupérer une variable client coté serveur sans postback

Augustus
|
Merci beaucoup pour ta réponse. C'est bel et bien ce que j'ai fini par faire à peu de chose près. (j'avais fini par trouver la solution) Cependant, je serai très intéresssé par une version ajax. J'ai beaucoup de mal à comprendre la philosophie ajax. Si tu as le temps et si tu pouvais me donner une version équivalente de ce code en ajax, je pourais l'étudier. car les exemples d'ajax que je trouve sont trop complèxe et j'ai du mal à synthétiser le système de communication client\serveur Encore merci. P.S: j'attends avec impatience ton explication ajax. Si tu n'as pas le temps ou ne veux pas t'embéter avec ca je comprendrai... M@le
|
|
vendredi 5 décembre 2008 à 16:10:20 |
Re : récupérer une variable client coté serveur sans postback

ggtry
|
Rebonjour,
Voici un exemple simple, qui fait à peu près la même chose que ci-dessus. Dans un updatepanel ajax, j'ai mis deux labels, un qui reçoit le texte d'une textbox extérieure à cet updatepanel, l'autre qui affiche l'heure si on clique sur un bouton. Dans l'updatepanel tu as donc deux "triggers" (qui pointent vers les contrôles extérieurs à l'update panel qui, sur un événement les affectant, vont déclencher le postback asynchrone). En l'occurrence, il s'agit d'un timer, règlé à 1000 (événement Tick), et d'un bouton asp (événément click). Ces deux événéments seront donc traités sans postback complet de la page. Ces deux contrôles ont été mis en dehors de l'updatepanel. En l'occurrence, il aurait été aussi été possible de les mettre dedans (dans le contenttemplate, en supprimant les triggers). Bien entendu, il faut que tu aies installé au préalable les composants ajax. Un avantage parmi d'autres est que tu n'as pas à t'occuper du javascript, qui est généré automatiquement, et que tu as accès "normalement" à tes contrôles côté serveur.
<%@ Page Language="VB" %> <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " [ Lien ]"> <script runat="server"> Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Dim l As Label = CType(UpdatePanel1.FindControl("Label1"), Label) If TextBox1.Text = "essai" Then l.Text = "message ..." Else l.Text = TextBox1.Text End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim l2 As Label = CType(UpdatePanel1.FindControl("Label2"), Label) l2.Text = Date.Now End Sub </script> <html xmlns=" [ Lien ]" > <head runat="server"> <title>Page sans titre</title> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> Texte : <asp:Label ID="Label1" runat="server" Text=""></asp:Label> <br /> Heure : <asp:Label ID="Label2" runat="server" Text=""></asp:Label> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> </Triggers> </asp:UpdatePanel> <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick"> </asp:Timer> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Heure" OnClick="Button1_Click" /> </div> </form> </body> </html>
GGtry
|
|
lundi 8 décembre 2008 à 09:22:32 |
Re : récupérer une variable client coté serveur sans postback

Augustus
|
Salut ggtry, Mille fois merci pour ton code. Enfin un code ajax compréhensible. Cependant, je ne vois pas quoi mettre à la place de ton lien. Peux tu m'éclairer la dessus. Encore merci M@le
|
|
lundi 8 décembre 2008 à 10:01:01 |
Re : récupérer une variable client coté serveur sans postback
|
lundi 8 décembre 2008 à 10:04:03 |
Re : récupérer une variable client coté serveur sans postback

ggtry
|
Bonjour,
Je n'ai pas fait attention en faisant mon copier/coller. Mais il s'agit simplement des adresses habituelles que tu as dans la balise doctype et la balise html quant tu crées une page asp. C'est donc 1/ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd et 2/ http://www.w3.org/1999/xhtml
GGtry
|
|
lundi 8 décembre 2008 à 10:32:09 |
Re : récupérer une variable client coté serveur sans postback

Augustus
|
C'est encore moi! Je n'arrive pas à faire démarrer ce fichu timer au chargement de la page. Sur le page_load j'essai de faire Timer1.start() mais il ne comprends pas. Peux tu m'aider STP Merci d'avance M@le
|
|
lundi 8 décembre 2008 à 11:03:59 |
Re : récupérer une variable client coté serveur sans postback

ggtry
|
Le timer devrait démarrer tout seul. Lorsque tu tapes quelque chose (n'importe quoi) dans le textbox, rien ne s'affiche dans le label ? Et est-ce que le bouton, avec l'heure, marche ? Sinon, as-tu une erreur ? Assure toi aussi que ton navigateur autorise les scripts javascript.
GGtry
|
|
lundi 8 décembre 2008 à 11:14:53 |
Re : récupérer une variable client coté serveur sans postback

Augustus
|
Le bouton avec l'heure fonctionne bien mais pas le timer Autrement, je suis sur IE 7 et il me semble que les scripts javascript sont autorisés. Par conte j'ai un done with error au chargement de la page M@le
|
|
Cette discussion est classée dans : asp, text, function, page, chat
Répondre à ce message
Sujets en rapport avec ce message
Multiligne [ par sandy49 ]
Dans ma base de donnée access j'ai un text avec des saut de lignes mais lorque que recupère ce text dans ma page asp J'ai plus les sauts de ligneComme
Urgent: comment Afficher du text dans une page asp.net [ par dev19 ]
Bonsoir tout le monde j'ai un probleme daffichage du text stocker dans sql-server, je ne c'est pas comment l'afficher dans une page asp.net,est-ce-qu'
Envoyer la valeur d'une variable d'une page ASP.NET a une autre [ par MzSrH ]
Bonjour, Comme le titre l'indique, je cherche à envoyer la valeur d'une variable d'une première page à une deuxième page. Sur ma page d'accueil, je ré
asp.net dans visual studio 2008 [ par kafox ]
bonjour je suis entrains de faire une application web sur asp.net/vb et j'ai besoin de votre aide.Je n'arrive pas à faire une redirection vers la page
UserControl ASP DotNet [ par smeriem ]
Salut, J'ai un probleme en fait je veux insérer un usercontrol (.ascx) dans ma page .aspx de facon dynamique. J'ai une seule page Default.aspx qui con
donnée tableau excel --> access --> page asp [ par garithos ]
Bonjour, je souhaiterais faire un bestiaire d'un jeu, j'ai en premier lieux mis tout sur excel, puis transféré le tableau sur Access, maintenant je vo
ASP.Net Master page [ par amatou38 ]
Bonjour tout le monde, Alors je vous lis depuis longtemps et aujourd'hui je sens le besoin de vous sollicité! Je développe un site en Asp.net 2010 j'a
Ce type de page n'est pas pris en charge [ par fahdbouazizi ]
bonjour, je suis débutant en ASP, j'essaie depuis qques jours lancer un site web dont je possède le code (le site il est déjà hébergé sur un serveur e
probléme avec code javascript dans une page asp [ par oussama112 ]
Catégories Cuisson <a href="" title="Acheter votre Cuisinières 50, 60, 90
asp.net/c# ocjet c# et bases de données [ par aliabab ]
Bonjour tout le monde! merci pour votre attention Je ne sais pas si je suis dans la bonne catégorie mais je vais quand même tenter. Dans le page load
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
STABILITé DU DéBIT 3GSTABILITé DU DéBIT 3G par benzekrighizlane
Cliquez pour lire la suite par benzekrighizlane
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|