User Control dynamique (C#) [Résolu]

Messages postés
237
Date d'inscription
mercredi 18 décembre 2002
Dernière intervention
31 août 2009
- - Dernière réponse : jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 31 oct. 2006 à 16:10
Bonjour,


Je cherche aussi à résoudre ce pb.


J'ai mon menu qui mene à la page => "?page=employe" ou
"?page=departement". Un coup je voudrai que ça m'affiche employe.ascx et de l'autre departement.ascx. Comment je fais pour implémenter dynamiquement le
user control ?

J'ai compris comment faire pour l'insérer de manière fixe (simple on le drag and drop:)), il m'ajoute une balise register + le user control. Mais si par la suite je veux pourvoir jouter dynamiquement un nouveau menu exemple "?page=direction", je n'ai pas envie d'avoir a recompiler tout le code. Surtout que par la suite ce ne sera pas des développeur qui vont l'administrer !!


Si quelqu'un peut m'aider c'est avec plaisir :)


Merci
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
3
Merci
Bonjour, pour la fin oui t'as tout faux ;-)

pour rajouter un controle dynamiquement il faut le mettre dans le page_init pour que tu puisses conserver les postback ... mais tu peux aussi rajotuer des controls dans le page_load sauf que dans ton cas tu essayais d'acceder au controle de la page et pas du userControl et ca il aime pas ! donc si tu veux rajouter ton controle dans la apge (aspx) fait le dans le code behind de la page sinon rajoute le dans l'event init de ton usercontrol.

pour ce qui est de ton dernier  message, un
Cyril - MVS - MCP

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de jesusonline
Messages postés
237
Date d'inscription
mercredi 18 décembre 2002
Dernière intervention
31 août 2009
3
Merci
Merci pour ton aide, j'ai maintenant avancé mais j'ai toujours des problèmes:
[page.ascx.cs]
public partial class include_menu_page : System.Web.UI.UserControl
{
    private String _page;

    public String page
    {
        get { return _page; }
        set {
            if (value != null && value != "")
            {
                _page = value;
            }
            else
            {
                _page = "~/include/pages/mon_compte/mon_compte.ascx";
            }
        }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        UserControl page = (UserControl)LoadControl(_page);
        panel.Controls.Add(page);
    }

}

J'ai mis un breack point au niveau du set, pour voir a quel moment j'y passais.

ensuite dans :
[Default.aspx]

<%@ Register Src="include/menu/page.ascx" TagName="page" TagPrefix= "uc2" %>


J'imagine que page ="~/include/pages/mon_compte/mon_compte.ascx" ça correspond à passer par la fonction set, et pourtant je ne passe pas par mon breack point ..... Et donc quand je le lance ça plante car _page est null !!

 Une idée ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de ranouf
Messages postés
237
Date d'inscription
mercredi 18 décembre 2002
Dernière intervention
31 août 2009
3
Merci
j'ai changé " public String page" en " public String include" et ça marche .... (bien entendu du j'ai aussi modifié Defautl.aspx) c cool !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de ranouf
Messages postés
237
Date d'inscription
mercredi 18 décembre 2002
Dernière intervention
31 août 2009
0
Merci
Je vous explique un peu l'architecture :

Default.aspx
  --> left.ascx (menu de gauche)
  --> page.ascx (page centrale), ce fichier contient :
        protected void Page_Load(object sender, EventArgs e)
        {
           UserControl center = (UserControl)Page.LoadControl("~/include/pages/mon_compte/mon_compte.ascx");
            Page.Controls.Add(center);
        }

et j'obtiens le message d'erreur suivant :
"Impossible de modifier la collection de contrôles durant les phases DataBind, Init, Load, PreRender ou Unload."}"

Comment dois je m'y prendre pour qu'il me charge dynamiquement mon user control ?
Commenter la réponse de ranouf
Messages postés
237
Date d'inscription
mercredi 18 décembre 2002
Dernière intervention
31 août 2009
0
Merci
J'ai donc décidé de créer une méthode vu qu'on peut pa le faire dans le Page_Load
    public void LoadUserControl(String Uc)
    {
        UserControl center = (UserControl)Page.LoadControl("~/include/pages/mon_compte/mon_compte.ascx");
        Page.Controls.Add(center);
    }

J'ai ajouté dans page.ascx le code suivant :

test

Donc quand s'initialise mon div je devrai avoir l'ajout du User Control "mon_compe.ascx"

ce fichier contient le code suivant :
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="mon_compte.ascx.cs" Inherits="include_pages_mon_compte_mon_compte" %>

Mon compte > Mon profil !!!

Je devrai donc voir "Mon compte > Mon profil !!!" s'afficher quelque part ? Pourtant il ne s'affiche pas alors que j'ai pourtant chargé le User Control ....
Ou alors j'ai tout faux, j'attends vos réponses :)

++
Commenter la réponse de ranouf
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
0
Merci
Interressant comme problème :-)

en fait tous les Control possedent une propriété Page avec un p majuscule (qui est bien sur en lecture seul) lors du parsing de la page pour la compilation il ne tient pas compte de la casse de la propriété donc il se melange les pinceaux entre page et Page, c'est donc pour ca que la propriété n'etait jamais setté.

<hr />Cyril - MVS - MCP
Commenter la réponse de jesusonline

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.