amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008
-
27 juil. 2004 à 22:59
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008
-
29 juil. 2004 à 16:48
SAM
Plusieurs de mes pages contiennent des composants avec des objets asp.net donc, nécessitant un form runat="server"
Il est impossible de mélanger plusieurs form runat="server" dans une même page et donc, quand un composant intégré dans la page contient déjà un form, on ne peut pas en mettre un dans la page.
La solution est alors de créer encore un autre composant même si il n'est utilisé que par cette page.
J'ai une page qui ne connait pas à l'avance le composant qu'elle doit ajouter. Elle choisit ce composant en fonction d'une langue.
J'aurais voulu l'intéger à l'aide du LoadControl(fichier)
dans laquelle fichier est un chaine de caractere écrite en fonction du composant à charger. Mais ce composant contient une form runat="server" et il refuse de le charger. pourtant, toutes les parties de la page nécessitant un form sont dans des composant (la page n'en contient pas).
Si qq voit le problème et connait un moyen de le résoudre.
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 27 juil. 2004 à 23:03
SAM
Je m'aperçoit que c pas très clair alos je vais mettre un bout de code :
Ma page : toto.aspx
Elle contient un composant toto_partie1.ascx
et ne connait pas le deuxième composant (soit toto_fr.ascx, soit toto_esp.ascx, soit toto_uk.ascx, donc en fonction d'un parametre en fin.
Le premier contient un form runat="server"
Le deuxieme aussi
Et asp.net refuse de le charger en me disant qu'il ne peut pas avoir deux form runat="server " dans une meme page
Hors, j'ai déjà des pages qui contiennent plusieurs composants, chacun avec son form runat="server"
Est-du au faite que dans ce cas, je charge le deuxième composant avec LoadControl
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 28 juil. 2004 à 07:11
dans un ascx, tu ne dois pas mettre form runat="server" sinon ca marche pas
enleve cette balise dans ton ascx si tu as mis une en tete enleve la aussi, tu ne dois avoir que le code que tu mettrais à l'interieur de form runat=server dans une page
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 28 juil. 2004 à 11:32
SAM
Apres mon nouvel essai, les composants étant en code-behind, il me demande de placer les éléments entre des balises form runat="server".
En faites, ca marche bien si la page ne contient que des composants même si chacun possède son propre form runat="server". En revanche, quand tu as un composant avec un form runat="server", tu ne peux pas mettre un form directement dans ta page. Il faut alors refaire un composant.
C'est un peu pénible, surtout qu'en HTML, tu peux avoir 15 formulaires que ca l'empeche pas de vivre. Mais bon, soit. En revanche, même si tu fais que des composants, ta page ne contient alors aucun form, c les composants qui les contiennent. Et bien tu peux pas te servir du LoadControl. C'est comme si tu mettais un form dans ta page et c'est refusé.
Enfin, je me régale quand même dix fois plus à coder en .net mais nos amis de chez microsoft n'ont pas pensé à tout et plein de choses faciles en asp 3 deviennent complexe en asp.net.
Vous n’avez pas trouvé la réponse que vous recherchez ?
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 28 juil. 2004 à 13:03
SAM
En faites, la page ou ça marche, les formulaires sont dans des Panels affichés à tour de rôle. Donc, un seul form par page n'est possible. Mais comment faire alors quand on veut des composants à intégrer à toutes les pages avec son propre code-behind (par exemple, un composant pour une identification, un autre pour changer la langue des pages...) et qui nécessite que les contrôles serveur soit entourés par des form.
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 28 juil. 2004 à 21:46
SAM
Footer.ascx
<%@ Control Language="c#" Inherits="Magazine.Footer" %>
<form runat=server>
</form>
(avec d'autres balises html standard autour)
Ma page incorpore ce .ascx mais si j'enleve le form de ce composant pour le mettre dans la page, il me dit que les ImageButton doivent être dans des balise form runat=server.
Si je les laisse, comme j'ai un autre composant qui a des balises form, il me dit qu'il ne peut avoir qu'une balise form par page.
Le code-behind est censé exécuté les évenements OnClick pour changer des valeurs dans des variables de session.
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 29 juil. 2004 à 13:00
SAM
J'ai essayé ta solution mais à chaque fois je me fais jeter. Je me suis demandé si c'était pas parceque le controle avait du code-behind pour son fonctionnement qu'il avait besoin de balises form à l'intérieur du composant.
Je vais rééssayer ta solution puisque tu me dis que ça marche chez toi, mais hors de mon projet, dans un truc plus simple ou je testerais juste la solution avec une page et deux composants.
Je verrais bien et je laisserais un message sur ce forum sur le résultat. En tout cas, merci et @+
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 29 juil. 2004 à 13:06
j'ai vu aussi dans les exemples que tu mettais qu'il n'y avait pas d'attribut id or cet attribut est obligatoire et en code behind, il n'y a pas besoin de mettre onclick dans la balise ...
amorosalain
Messages postés52Date d'inscriptionjeudi 1 janvier 2004StatutMembreDernière intervention22 juillet 2008 29 juil. 2004 à 16:48
SAM
Si l'id y est, j'ai oublié de le mettre dans l'exemple
Mais si tu mets pas OnClick, comment tu sais quel est le nom de la fonction qui va réccupérer l'évenement sur ton ImageButton.
Je fais
et dans le code-behind du composant
public void Click1(Object sender,ImageClickEventArgs e)
{
// Mémorisation de l'image cliqué dans le Footer
// dans une variable de session utilisé par toutes les pages
Session["mavariable"] = ((ImageButton)sender).ID;
}
Mais c peut être le faites que je gère des évenements qui fait qu'il m'oblige à mettre les ImageButton dans un form