Formulaires ASP.NET et Frames

Formulaires ASP.NET et Frames - C#/.NET managed - Programmation

Marsh Posté le 11-05-2004 à 19:56:11    

Salut à tous,
 
voilà mon problème, j'ai deux frames (et deux fichiers .aspx) :
- une (Frame 1) qui contient le formulaire ASP.NET (avec des listes "autopostback", des champs textes, des boutons radio...).
Formulaire qui est en fait un gros moteur de recherche par saisie de données ou parcours de listes..
 
- une autre frame (Frame 2) qui affiche les données en fonction des infos reçues par l'autre Frame.
 
Donc la Frame 1 doit transmettre des données à la Frame 2 par la méthode GET ou POST (pas d'importance là dessus).
 
 
Mon problème est que le Redirect.Response() ne permet pas de sélectionner une Frame et s'affiche donc dans la même Frame (Frame 1 au lieu de Frame 2).
Un bouton de formulaire "<asp : button ...>" ne marche pas même si je mets target="Frame2" dans la balise "<form>" puisque les listes qui sont en autopostback posent problèmes car elles submit automatiquement.
 
Si vous comprenez mon problème (je m'explique pas toujours très clairement  :whistle: ) que me suggérez vous ?


Message édité par pc2000 le 11-05-2004 à 20:00:17
Reply

Marsh Posté le 11-05-2004 à 19:56:11   

Reply

Marsh Posté le 11-05-2004 à 21:00:42    

Personne n'a utilisé les Frames avec l'ASP.NET (en C# ou VB.NET) ?

Reply

Marsh Posté le 12-05-2004 à 10:00:14    

je ne suis pas sûr de tout comprendre mais je pense que tu ne connais pas le principe de gestion des événements avec le framework .NET
j'ai déjà posté un truc sur ce sujet... je le recherche et je te le donne !
 
edit :  
http://forum.hardware.fr/forum2.ph [...] =0#t710500
 
si ça va pas, explique mieux ton truc... et on s'en sortira !


Message édité par titione le 12-05-2004 à 10:07:30
Reply

Marsh Posté le 12-05-2004 à 11:43:27    

Je pense que tu n'as pas bien compris mon problème (ce n'est plus du tout le même, maintenant je sais faire des submit  :ange: )
 
Voilà les probs qui se posent, j'ai mon formulaire qui comportent plusieurs objets  

Code :
  1. protected System.Web.UI.WebControls.DropDownList categories;
  2.  protected System.Web.UI.WebControls.DropDownList sscategories;
  3.  protected System.Web.UI.WebControls.Button Button1;
  4.  protected System.Web.UI.WebControls.Button Button2;
  5.  protected System.Web.UI.WebControls.TextBox id_marque;
  6.  protected System.Web.UI.WebControls.CheckBox stock;
  7.   protected System.Web.UI.WebControls.HyperLink test;


 
 
Ce que je veux c'est transmettre le résultat à une FRAME donc je gère l'évènement comme ceci :
sur un bouton je lui mets "OnClick=go" et  

Code :
  1. // dans fichier .aspx
  2. <asp:button id="Button1" onclick="go" runat="server" Text="Submit"></asp:button>
  3. // dans aspx.cs
  4. public void go(...)
  5. {
  6.   Server.transfert("mapage.aspx" );
  7. }


Le problème avec ce transfert c'est que ca reste sur la même Frame alors que je veux envoyer les résultats à une autre Frame.
Je peux aussi faire ca :

Code :
  1. <form id="Form1" method="post" target="maframe" runat="server">


Mais ça ne marche pas non plus car à chaque autopostback d'une de mes liste ca renvoie sur l'autre Frame...
Donc je fais comme ceci :
 

Code :
  1. private void Page_Load(object sender, System.EventArgs e)
  2. {
  3.   url="ProductsList.aspx?catID="+categories.SelectedItem.Value+"&SScatID="+sscategories.SelectedItem.Value+"&MarqueID="+marques.SelectedIndex;
  4.   test.NavigateUrl=url;
  5. }


Et le lien "test" joue le rôle d'un bouton de formulaire en fait...
 
Mais le problème ici c'est que les champs textes ne sont pas mis à jour et pris en compte dans ma recherche.
 
En espérant que j'ai été plus clair et que tu puisses m'aider.


Message édité par pc2000 le 12-05-2004 à 11:52:00
Reply

Marsh Posté le 12-05-2004 à 12:14:12    

confusion entre langage serveur et langage client...
1ère chose :  

Code :
  1. <asp:button id="Button1" onclick="go" runat="server" Text="Submit"></asp:button>
  2.  
  3.   // dans aspx.cs
  4.   public void go(...)
  5.   {
  6.       Server.transfert("mapage.aspx" );
  7.   }


ok tu rajoutes le onclick qui sera traité en client... mais bon ça fait appel à la méthode go qui est en serveur... forcément ça risque pas de marcher... et tu restes au même endroit puisque la méthode go n'est pas appelée..
 
2ème chose :
le framework .NET est fait pour de base traiter les informations d'un formulaire sur la même page (relations SGBD..) ! et après tu fais seulement ta redirection...
bon dans le cas où des variables doivent absolument passer (c'est le cas ici visiblement) :
dc tu fais ça :

Code :
  1. url="ProductsList.aspx?catID="+categories.SelectedItem.Value+"&SScatID="+sscategories.SelectedItem.Value+"&MarqueID="+marques.SelectedIndex;
  2.        test.NavigateUrl=url;


mais tu le fais dans la méthode appelée par le bouton côté serveur... bouton_onclick...


Message édité par titione le 12-05-2004 à 12:20:25
Reply

Marsh Posté le 12-05-2004 à 12:39:58    

Oui, tu as totalement raison, j'ai fait des confusions ...
J'étais en train de faire ça...
 

Code :
  1. public void submit(object sender, System.EventArgs e)
  2.  {
  3.   url="ProductsList.aspx?catID="+categories.SelectedItem.Value+"&SScatID="+sscategories.SelectedItem.Value+"&MarqueID=";
  4.   //crée une fonction javascript sur la page courante qui sera exécutée
  5.   Response.Write("<body><script>parent.frames[\"dynamic\"].location.href(\"" + url + "\" );</script></body>" );


 
 
Merci beaucoup en tous les cas.
Quel est à ton avis la meilleure solution ?
 
Je pense que c'est la tienne car je suis pas sûr que ça soit très "propre de générer.
 
Mais ton truc ça impliquerait qu'il faille appuyer sur 2 "boutons".
Un premier bouton pour enregister l'url puis le lien qui permet de transmettre les données à la FRAME (si j'ai bien compris bien sur..)


Message édité par pc2000 le 12-05-2004 à 12:47:15
Reply

Marsh Posté le 12-05-2004 à 12:44:18    

En fait, j'ai pas tout à fait l'impression d'avoir bien compris l'ASP.NET, j'ai l'impression que ce langage agit côté client alors que ce n'est à priori pas le cas.
 
Il utilise uniquement la gestion des évènements (PostBack...) pour déterminer ce qui se passe et l'ASP.NET ne fait que générer dynamiquement du Javascript.
 
Alors comment agir directement côté client ? Utiliser le bon vieux Javascript ?


Message édité par pc2000 le 12-05-2004 à 12:47:57
Reply

Marsh Posté le 12-05-2004 à 12:49:07    

nan ça agit côté serveur !!!
c un langage compilé serveur
après effectivement ça créé du javascript mais bon tu ne dois pas t'en soucier... quand je fais du .NET je ne regarde pas le js... tu peux très bien programmes sans t'en soucier.. c'est même conseillé...
 
essaie de bien comprendre comment se passe la gestion des événements avec le 1er affichage de la page, le postback et tout... et tu comprendras mieux comment tu dois faire de manière logique :)
 
quant aux coups des 2 clics sur le bouton, je ne vois pas pourquoi... tu peux tout faire d'un coup...

Reply

Marsh Posté le 12-05-2004 à 12:54:40    

titione a écrit :

nan ça agit côté serveur !!!
c un langage compilé serveur
après effectivement ça créé du javascript mais bon tu ne dois pas t'en soucier... quand je fais du .NET je ne regarde pas le js... tu peux très bien programmes sans t'en soucier.. c'est même conseillé...
 
essaie de bien comprendre comment se passe la gestion des événements avec le 1er affichage de la page, le postback et tout... et tu comprendras mieux comment tu dois faire de manière logique :)
 
quant aux coups des 2 clics sur le bouton, je ne vois pas pourquoi... tu peux tout faire d'un coup...


 
Je vois pas comment puisque je dois obligatoirement cliquez sur un lien qui doit contenir l'attribut  Target="dynamic"
Donc je dois d'abord générer le lien de la page vers lequel il pointe (en fonction de tous les paramètres du formulaires, contenu du textbox, index séléctionné sur la liste).


Message édité par pc2000 le 12-05-2004 à 13:00:26
Reply

Marsh Posté le 12-05-2004 à 15:02:07    

Une autre question rien à voir avec ce problème.
Est qu'il est possible de créer une "application" en ASP.NET qui permettrait de ne pas rafraichir la page tout en travaillant sur des changements d'états de listes.

Reply

Marsh Posté le 12-05-2004 à 15:02:07   

Reply

Marsh Posté le 13-05-2004 à 09:49:43    

changement d'état ???

Reply

Marsh Posté le 13-05-2004 à 11:22:23    

Ouais bon c'est pas très clair, je voudrais que des listes déroulantes (de type DropDownList) interagissent entre elles.
Exemple : je choisis une catégorie dans la liste "catégorie" et les sous catégories correspondantes se chargent (en fonction de la catégorie séléctionnée) dans la liste "sous-catégorie".
Actuellement je travaille avec un Autopostback et un rafraichissement de la page (avec une BD & ADO.NET) et c'est pas ce qu'il y a de plus rapide..
(Je sais que c'est possible de ne pas rafraichir la page en J2EE et Javascript)


Message édité par pc2000 le 13-05-2004 à 11:23:58
Reply

Marsh Posté le 13-05-2004 à 13:43:11    

la problématique Web est la suivante :
dynamique en serveur --> php, .net etc..
dynamique en mode client seul --> javascript...
t'as pas trop le choix... faut que tu gères ça manuellement en javascript si tu ne veux pas du postback... ça implique qu'il faut charger toutes les données avant et là c'est ptet pas optimal non plus :(

Reply

Marsh Posté le 13-05-2004 à 21:11:53    

Donc tout stocker les données dans un fichier .js puis gérer tout manuellement en Javascript :(
Pas terrible en effet, je vais laisser les Postback même si ca implique le rafraichissement de la Frame à chaque séléction..


Message édité par pc2000 le 13-05-2004 à 21:12:04
Reply

Marsh Posté le 13-05-2004 à 21:14:36    

Au fait ce qui est expliqué là dedans http://dotnet.developpez.com/faq/a [...] javascript
 
C'est crade comme méthode ou c'est tout à fait normal de générer du Javascript en ASP.NET ?

Reply

Marsh Posté le 14-05-2004 à 00:07:30    

perso je trouve ça crade oui...
voilà comment j'essayais de travailler :
en code html : je mettais toutes les actions client
en code behind : les actions serveur..
 
là c du code client qu'on veut ajouter dc autant les écrire directement dans le code html... (bon c pas tjrs faisable...)
sinon très vite tout devient compliqué quand tu cherches un bout de code : est-il dans le html, dans le code behind, dans un script attaché etc...
faut essayer d'ordonner tout ça (ce qui est pas évident en .NET !!)
voilà ce que j'en pense :)

Reply

Marsh Posté le 14-05-2004 à 13:27:37    

titione a écrit :

perso je trouve ça crade oui...
voilà comment j'essayais de travailler :
en code html : je mettais toutes les actions client
en code behind : les actions serveur..
 
là c du code client qu'on veut ajouter dc autant les écrire directement dans le code html... (bon c pas tjrs faisable...)
sinon très vite tout devient compliqué quand tu cherches un bout de code : est-il dans le html, dans le code behind, dans un script attaché etc...
faut essayer d'ordonner tout ça (ce qui est pas évident en .NET !!)
voilà ce que j'en pense :)


 
Ba moi pour appeller une fonction javascript (qui lancer une fenêtre popup) j'ai tout fait dans le fichier html (aspx) j'ai mis la fonction dans l'entête <head> et dans l'action du bouton j'ai mis OnClick=javascript:fonction();  
Je trouve ça moins crade que de mettre du javascript dans du code C# et d'écrire du Javascript n'importe où sur la page HTML  :)  
 
En tous les cas merci de ton aide (dans ce topic et l'autre).


Message édité par pc2000 le 14-05-2004 à 13:27:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed