[ASP.NET/C#] Problème de formulaires côté serveur (update 4/05/04)

Problème de formulaires côté serveur (update 4/05/04) [ASP.NET/C#] - C#/.NET managed - Programmation

Marsh Posté le 22-04-2004 à 10:42:00    

Voilà ce que je veux faire :
j'ai une table sous Sql Server qui contient des produits qui ont chacun des noms d'attributs spécifiques avec un type (textfield, listBox ...).

Code :
  1. Modèle M123 | Hauteur | Textbox
  2. Modèle M123 | Type | ListBox
  3. Modèle M124 | Largeur | Textbox
  4. ....


Je sais récupérer ces données mais je veux une fois que ces données sont récupérées, créer les objets correspondants (je fais la même page .aspx qui doit contenir des données différentes selon les produits).
Le problème c'est que je suis sous Visual Studio.NET 2003 et je ne sais pas comment déclarer les objets textbox ou listbox de manière dynamique dans le fichier .aspx (je sais qu'en PHP j'aurais fait un simple  

Code :
  1. <? if (condition) echo "<input type='text' name='hauteur' ..>"

en plein milieu du code
)
Mais comment faire en ASP.NET ?
Merci d'avance


Message édité par pc2000 le 04-05-2004 à 21:18:49
Reply

Marsh Posté le 22-04-2004 à 10:42:00   

Reply

Marsh Posté le 22-04-2004 à 10:59:20    

Reply

Marsh Posté le 22-04-2004 à 11:46:50    


je sais oui, mais je veux des conseils de pro, ca serait quoi le plus adapté pour mon cas :
Un DataGrid, DataList, Repeater ?
Ou pas utiliser un objet ?
J'ai même un super bouquin Formation à .... ASP.NET
 
J'aurais du prendre ASP.NET pour les nuls  :whistle:


Message édité par pc2000 le 22-04-2004 à 11:47:53
Reply

Marsh Posté le 22-04-2004 à 11:53:07    

tout dépend de la tronche que tu veux que ca aie a l'arrivée [:spamafote]
 
dans tous les cas, ne fous pas de code directement dans l'aspx, c'est cracra
 
le codebehind est fait pour ca
 
la dedans tu déclares un nouvel objet TextBox et tu le fous dans un conteneur quelconque

Reply

Marsh Posté le 22-04-2004 à 15:07:27    

En gros ca serait de la Création dynamique de formulaire Web (nombre de button, champs, listes variables..).
Le mieux ne serait il pas de créer un objet panel et d'ajouter des trucs dedans ?

Reply

Marsh Posté le 22-04-2004 à 15:22:47    

"un conteneur quelconque"

Reply

Marsh Posté le 22-04-2004 à 15:46:51    

Oui tu me l'avais déjà dit :) et sinon je cherche à faire un parcours simple de mon DataSet (ou DataReader ?) du style (j'ai cherché mais de partout il est question de mettre le Dataset dans un objet comme DataList ou DataGrid) :  

Code :
  1. tant que (!fin de DataSet)
  2. lire données (puis faire traitement)
  3. Enregistrement suivant
  4. Fin tant que


 
Merci
 
PS : le SGBD est SQL Server et je travaille sous VS .NET 2003 (C#)


Message édité par pc2000 le 22-04-2004 à 15:50:22
Reply

Marsh Posté le 22-04-2004 à 16:28:06    

y msdn.microsoft.com pour la doc
 
ou la msdn livrée avec vs enterprise architect
 
je te renvoie systématiquement a la doc, c'est ce qu'il y a de mieux pour toi :o

Reply

Marsh Posté le 23-04-2004 à 11:25:56    

Tiens j'ai un problème et là je vois vraiment pas la solution pourtant j'ai cherché.
Voilà je fais une requête sur un élément de type ntext(2000) (sous SqlServer) que je neux pas pas changer.
Je fais la requête select element from Table
ET quand je fais  

Code :
  1. string nom=(string)ds.Tables[0].Rows["element"];


 
J'ai systématiquement une exception
Specified cast is not valid.
 
C'est pas convertible le ntext en String ??
Sinon j'ai essayé aussi :
[i]select CONVERT(varchar(2000),element) as nom from Table  

Code :
  1. string nom=(string)ds.Tables[0].Rows[i]["nom"];


 
Et la même erreur ??
Je comprends pas là, ça doit être tout con mais j'arrive pas :(


Message édité par pc2000 le 23-04-2004 à 11:29:47
Reply

Marsh Posté le 23-04-2004 à 13:52:22    

string nom=ds.Tables[0].Rows[i]["nom"].ToString();
 
peut etre [:gratgrat]

Reply

Marsh Posté le 23-04-2004 à 13:52:22   

Reply

Marsh Posté le 23-04-2004 à 13:53:47    

sinon  
 
Convert.ToString (ds.Tables[0].Rows[i]["nom"])
 
:o

Reply

Marsh Posté le 23-04-2004 à 16:12:31    

Oui merci Tamahome, en effet, c'était tout con   :sleep:


Message édité par pc2000 le 24-04-2004 à 00:19:03
Reply

Marsh Posté le 26-04-2004 à 11:27:50    

Un nouveau problème,
en mettant ce code dans le fichier .aspx :
 
         

Code :
  1. <form method="post" action="validation.aspx" runat="server">
  2. <asp:Panel id="panel1" runat="server" BackColor="#f5f5f5" Width="600">
  3. </asp:Panel>
  4. </form>


 
Le conteneur Panel contient plein de champs et un bouton (tout est déclaré dans le code behind.)
Le formulaire me redirige toujours vers la page courante (alors que je veux récupérer les valeurs du formulaire dans validation.aspx).
 
Le code HTML généré est :
 

Code :
  1. <form name="_ctl0" method="post" action="ProductDetails.aspx?productID=G372B&amp;Category=G372B" language="javascript" onsubmit="ValidatorOnSubmit();" id="_ctl0">


 
PS : et en enlevant le runat="server" dans le <form ...> ca marche plus (exception..)


Message édité par pc2000 le 26-04-2004 à 11:31:55
Reply

Marsh Posté le 26-04-2004 à 19:55:24    

Personne n'a été confronté à ce problème ?
C'est normal ?

Reply

Marsh Posté le 28-04-2004 à 10:33:21    

PC2000 a écrit :

Personne n'a été confronté à ce problème ?
C'est normal ?


 
bon alors c normal :)
dans le framework .NET, le traitement des données se fait dans la présente page et non la page suivante... j'explique :
 
la page se charge normalement..
--> page_init, page_load
on clique sur le bouton qui poste le formulaire
ça recharge la page courante en mode postback (Page.IsPostBack...)
--> page_init, page_load  
et ça applique la méthode du bouton enfin
--> button_onClick
et c'est là que tu traites les données et que tu fais une redirection sous forme de Server.Transfer ou Response.Redirect
 
c le principe même du fonctionnement du framework !
est-ce clair ?


Message édité par titione le 28-04-2004 à 10:36:14
Reply

Marsh Posté le 28-04-2004 à 14:31:58    

En effet, ça répond tout à fait à ma question.
Donc il est inutile de mettre action="validation.aspx" dans la balise <form> ca n'a strictement aucun intérêt ?
Il faut donc traiter l'évènement du clic bouton et faire une redirection.
J'ai fait et ça fonctionne  :)  
 
Merchi bien
 
 
PS : différence entre Server.Transfer & Response.Redirect ?


Message édité par pc2000 le 28-04-2004 à 14:32:25
Reply

Marsh Posté le 28-04-2004 à 15:50:12    

ça c la grande question qui dure sous .NET !!
le mieux : http://www.vsnetfr.com/lien.aspx?ID=3617
perso je préfère les Server.Transfer ! t moins paumé dans les pages après (le form correspond à l'URL affiché...)


Message édité par titione le 28-04-2004 à 15:51:10
Reply

Marsh Posté le 04-05-2004 à 21:18:02    

Mon (nouveau) problème :
 
Je pars du Commerce Starter Kit pour réaliser une site de Ecommerce.
Les pages web du projets sont constituées d'une page .aspx (page.aspx) et de deux "user control" .ascx (_menu.ascx et _header.ascx).
Le truc c'est que j'ai besoin de mettre un menu dynamique (formulaire côté serveur) sur toutes mes pages web.
Ce menu dynamique est constitué de listes déroulantes (remplies par les données de la base)  
exemple typique :

Code :
  1. <form runat="server">
  2. <asp:DropDownList id="DropDown1" runat="server" />
  3. <asp:DropDownList id="DropDown2" runat="server" />
  4. <asp:DropDownList id="DropDown3" runat="server" />
  5. </form>


 
Je mets donc ce type dans code dans le fichier _header.ascx.
 
Celà ne pose pas de problème quand la page .aspx ne contient pas de formulaire dynamique mais dès que c'est le cas .. Erreur..
 
 
Une page ne peut comporter qu'une seule balise Form côté serveur.  
Détails de l'exception: System.Web.HttpException: Une page ne peut comporter qu'une seule balise Form côté serveur.
 
 
Normal puisqu'une page ASP.NET ne peut contenir plus d'une balise <form runat="server">.
Je me pose donc la question de la façon d'intégrer ce menu dynamique dans l'ensemble de mes pages web.
 
Utiliser un conteneur ne résoud pas mon problème :(
 
Merci d'avance de l'aide que vous pourrez m'apporter


Message édité par pc2000 le 04-05-2004 à 21:24:22
Reply

Sujets relatifs:

Leave a Replay

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