cs_Targos
Messages postés26Date d'inscriptionsamedi 18 janvier 2003StatutMembreDernière intervention 7 juillet 2008
-
4 juil. 2008 à 11:16
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
7 juil. 2008 à 16:08
Bonjour,
En asp.net 2.0, peut importe le language, j'aimerai pouvoir modifier
dynamiquement le "src" de la directive @register quelqu'un aurait-il
une solution ?
Sinon éventuellement je pourrai surchargé l'objet ou la méthode utilisé
par cette directive, mais je ne l'ai pas trouvé dans reflector..
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 4 juil. 2008 à 12:32
Bonjour,
Ce n'est pas possible, les directives de pages sont une sorte d'instruction de précompilation. Ce que tu demandes c'est comme vouloir modifier les réferences d'une assembly lors de l'execution.
Pourquoi as tu besoin faire cela ? A partir de là on trouvera une solution pour accomplir ce que tu veux.
cs_Targos
Messages postés26Date d'inscriptionsamedi 18 janvier 2003StatutMembreDernière intervention 7 juillet 2008 4 juil. 2008 à 14:09
D'autre piste de m'interreserait pas :p Je vais tenter d'expliquer, mais pas évident car le contexte est assez complexe.
J'ai une arborescence dans mon site qui fonctionne comme les css si on
veut, avec des fichiers génériques, puis des fichiers plus précis. avec
x niveau.
J'ai une fonction qui me permet, avec différent critère d'exécuter
cette mecanqiue. ex : donne moi le fichier le plus precis pour tel
critere, et la je vais recupérer soit ~/monfichier, soit
~/lvl1/monfichier, soit ~/lvl2/monfichier
J'ai besoin de faire la même chose avec des ascx.
J'ai une page, qui va dire charge moi l'ascx, et je veux utiliser ma
fonction. donc j'aurai le <@ register src="~/mecanique/monfichier"
et mecanique declanche l'appel a la fonction qui recupere le bon
fichier en fonction de critere. donc l'ascx charger dans la page pourra
etre different suivant les critéres.
Pour etre plus précis j'aurai x Ascx, qui hériteront du même .vb, mais avec des design totalement différent.
Le fait de passer par le register permet de pouvoir renseigner des
properties sur les ascx. Le loadcontrol me pose trop de contrainte.
Donc la solution que je cherche c'est, comment surcharger la directive register, pour modifier le fonctionnement du src... mais si ce n'est pas possible effectivement... je vais regarder du coté des itemplate peut etre
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 4 juil. 2008 à 14:28
Ton problème est interessant :-)
Je n'ai pas le temps d'y réfléchir tout de suite, mais si tu vois que j'oublie, n'oublie pas de me relancer.
Les ITemplates sont une piste, mais ca nécessite d'écrire un customcontrol plutot qu'un simple UserControl (mais dans la philosophie t'en es pas trop loin) et ca me parait être la solution la plus adapté à ton cas.
cs_Targos
Messages postés26Date d'inscriptionsamedi 18 janvier 2003StatutMembreDernière intervention 7 juillet 2008 7 juil. 2008 à 14:50
Hello, merci pour ta réponse.
Je m'en suis servi ainsi qu'un autre article US.
Là j'ai le code de mon TemplateCTL.ascx :
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="TemplateCTL.ascx.vb" Inherits="test_TemplateCTL" %>
Là j'ai le code de mon TemplateCTLascx.vb :
_
Partial Class test_CD_TemplateCTL
Inherits Targos.Web.UI.UserControl
Private _ContentTemplate As ITemplate
_
Public Property ContentTemplate() As System.Web.UI.ITemplate
Get
Return _ContentTemplate
End Get
Set(ByVal value As System.Web.UI.ITemplate)
_ContentTemplate = value
End Set
End Property
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
_ContentTemplate = Page.LoadTemplate(getPrmUrl(me.Criterion, "~/test/Template.ascx"))
If (_ContentTemplate IsNot Nothing) Then
_ContentTemplate.InstantiateIn(phContent)
End If
End Sub
End Class
getPrmUrl est la fonction qui suivant mes criteres me retourne le template a utiliser
ensuite dans le template.ascx j'ai juste :
<%@ Control Language="VB" ClassName="Template" %>
Jusque là tout va bien. Le templa
Par contre je voudrai pouvoir accéder à lbTest dans mon fichier "source" TemplateCTL. J'ai essayé phTemplate.findcontrol mais il n'y a pas de control. Je suppose que le InstantiateIn ne le permet pas ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 7 juil. 2008 à 16:08
Après le init (donc dans le load) tu devrais avoir accès à ton contrôle via phContent.FindControl("lbTest"), mais puisque PlaceHolder n'implémente pas INamingContainer je ne suis pas sur que ca fonctionne (mais je suis pas sur que c'est vraiment INamingContainer qui va aider).
Je te conseille de faire un vrai CustomControl et non un UserControl, les UserControl sont compliqués et tu risques de te complexifier la tache si t ne connais pas le fonctionnement interne des Control.
Regarde mon pseudo Code ainsi que la classe Login dans Reflector elle fait à peu pres la meme chose que ce que tu veux.