begin process at 2012 05 28 12:36:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Scripting

 > 

Javascript

 > 

récupérer une variable client coté serveur sans postback


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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>&nbsp;<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 Chat

Inherits System.Web.UI.Page

Implements ICallbackEventHandler

Private _callbackArg AsString

ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load

Dim cbReference AsString

Dim callbackScript AsString

Dim cm As ClientScriptManager = Page.ClientScript

cbReference = cm.GetCallbackEventReference(

Me, "arg", "ReceiveServerData", "context")

callbackScript =

"function CallServer(arg, context){" & cbReference & "; }"

cm.RegisterClientScriptBlock(

Me.GetType(), "CallServer", callbackScript, True)

If IsPostBack = FalseThen

Application(

"MonTexte") = ""

EndIf

EndSub

PublicSub RaiseCallbackEvent(ByVal eventArgument AsString) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent

_callbackArg = eventArgument

EndSub

PublicFunction GetCallbackResult() AsStringImplements System.Web.UI.ICallbackEventHandler.GetCallbackResult

SelectCase _callbackArg

Case"time"

ReturnMy.Computer.Clock.LocalTime.ToString()

Case"mem"

Return (My.Computer.Info.AvailablePhysicalMemory / 1024).ToString() & "K"

Case"Text"

Return (Application("MonTexte"))

CaseElse

Return _callbackArg

EndSelect

EndFunction

ProtectedSub TextBox1_TextChanged(ByVal sender AsObject, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

Application(

"MonTexte") = Application("MonTexte") & TextBox1.Text & vbCrLf

TextBox1.Text =

""

EndSub

End

Class





M@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

Augustus

Autant pour moi, c'était une question idiote

M@le

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


1 2

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales