IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Problème url rewriting


Sujet :

ASP.NET

  1. #1
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Bonjour, je rencontre un léger problème lorsque j'essaie de faire de l'url rewriting sous asp.NET.

    Voici la page Default.aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%@ Register TagPrefix="inc" TagName="inc" Src="inc/head.ascx" %>
    CONTENU -- CONTENU
    <inc:inc ID="inc" runat="server" />
    Et moi ce que j'aimerai faire dans Default.aspx.cs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        protected override void OnInit(EventArgs e)
        {
            string Value = Request.QueryString["name"];
            if (!string.IsNullOrEmpty(Value))
                inc.Src = Value + ".ascx";
            base.OnInit(e);
        }
    évidemment ça ne marche pas car l'attribut .Src est dans le @Register et il n'accepte pas les ID donc je ne sais pas trop comment m'y prendre

    Je ne sais pas si vous comprenez mais j'aimerai modifier le Src du Register dans une fonction C#, merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ça m'étonnerait que ce soit possible...

  3. #3
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Merci de votre réponse tout d'abord, mais j'ai déjà essayé en créant un :
    <div ID="inc" runat="server"></div>
    et en faisant inc.InnerHTML = "<!-- #Include file=\""+ Value +".aspx\" -->";

    mais sans plus de résultat...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Valter Voir le message
    Merci de votre réponse tout d'abord, mais j'ai déjà essayé en créant un :
    <div ID="inc" runat="server"></div>
    et en faisant inc.InnerHTML = "<!-- #Include file=\""+ Value +".aspx\" -->";

    mais sans plus de résultat...
    Cette méthode n'est pas possible : innerHTML doit contenir de l'HTML, pas de l'ASP.NET. Le contenu de innerHTML ne sera jamais interprété par le serveur.

    On ne peut pas changer dynamiquement le contenu des directives ASP.NET (les balises <%@ ... %>). Il faut utiliser une autre approche. Si je comprends bien, tu veux utiliser tel ou tel contrôle en fonction de la valeur d'un paramètre "name" passé en query string ? Dans ce cas, tu peux mettre dans ta page un contrôle PlaceHolder, auquel tu ajouteras un contrôle en fonction de la variable "name" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        protected override void OnInit(EventArgs e)
        {
            string Value = Request.QueryString["name"];
            if (Value.Equals("Control1"))
            {
                Control1 ctl = new Control1();
                placeHolder1.Controls.Add(ctl);
            }
            else if (Value.Equals("Control2"))
            {
                Control2 ctl = new Control2();
                placeHolder1.Controls.Add(ctl);
            }
            else ...
     
            base.OnInit(e);
        }
    Evidemment tu peux rendre ça un peu plus générique en utilisant la réflexion...

  5. #5
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Alors j'ai essayé en nommant un placeHolder "body", et en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            if (Value == "page")
            {
                Control ctl = new Control();
                body.Controls.Add(ctl);
            }
    Mais je ne sais pas comment 'inclure' la page dans ce script.

    Merci beaucoup,

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je comprends pas trop ce que tu fais là...
    C'est pas une instance de Control qu'il faut créer, mais une instance du type de contrôle dont tu as besoin. Par exemple si tu veux intégrer dans la page le contrôle défini dans head.ascx (comme dans ton exemple de départ), il faut faire new head()

  7. #7
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Néanmoins si j'essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Ligne 22 :         {
    Ligne 23 :             inc ctl = new inc();
    Ligne 24 :             body.Controls.Add(inc);
    Ligne 25 :         }
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%@ Register TagPrefix="inc" TagName="inc" Src="head.ascx" %>
    -- CONTENU --
    <inc:inc ID="inc" runat="server" />
    J'obtiens :
    Message d'erreur du compilateur: CS0118: '_Default.inc' est un 'champ' mais est utilisé comme un 'type'

    Merci,

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    inc n'est pas le nom du type de ton contrôle, si ?
    dans le fichier head.ascx.cs, le nom de la classe est pas plutôt head ?

  9. #9
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Si mais ça me mets toujours :
    Message d'erreur du compilateur: CS0118: 'head' est un 'type' mais est utilisé comme un 'variable'

    Merci,

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si tu te bases sur le même code que dans ton post de 14h26, il y a une erreur sur le Add. Il faut faire Add(ctl) et non Add(head) (head est un type et non une variable)

  11. #11
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Dans ce cas ça me met tout simplement une alerte avec WebDev.WebServer.exe a cessé de fonctionné, sans plus de précisions.
    Le code est :
    Code ASP.NET C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        protected override void OnInit(EventArgs e)
        {
            string Value = Request.QueryString["name"];
            if (Value == "head")
            {
                head ctl = new head();
                ctl.Controls.Add(ctl);
            }
     
        }

    Merci,

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Valter Voir le message
    Code ASP.NET C# : Sélectionner tout - Visualiser dans une fenêtre à part
    ctl.Controls.Add(ctl);
    tu essaies d'ajouter le contrôle à lui-même, ça ne risque pas de marcher... essaie plutôt comme ça :
    Code ASP.NET C# : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Controls.Add(ctl);

  13. #13
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Ah merci beaucoup mais un problème subsiste encore si je puis me permettre...

    Si au lieu de head.ascx j'ai account/head.acsx ?
    J'ai déjà essayé en remplaçant account_head() et ça ne marche pa

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Une autre approche
    Bonjour,
    perso j'utilise un truc similaire en faisant ceci dans le code behind:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Page.controls.add(Page.ParseControl(@"<%@ Register TagPrefix=""inc"" TagName=""inc"" Src=""inc/head.ascx"" %>"));
    //Si c'est un Assembly
    Page.controls.add(Page.ParseControl(@"<%@ Register Assembly=""Nom_Assembly"" Namespace=""Namespace_concerné"" TagPrefix=""cc2"" %>"));
    La solution serait de n'ajouter la directive Register qu'à la volée, mais dans ce cas tu ne pourrait pas utiliser de usercontrol dans le code déclaratif.

    Peut être que le fait de ré-enregistrer la délaration via ParseControl va régler ton problème.

    Mais il ne sagit pas d'URL Rewriting, l'url rewriting je le fait dans le Global.asax via ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
    Context.RewritePath(URL);
    }
    Si celà peut t'aider ;-)

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Valter Voir le message
    Ah merci beaucoup mais un problème subsiste encore si je puis me permettre...

    Si au lieu de head.ascx j'ai account/head.acsx ?
    J'ai déjà essayé en remplaçant account_head() et ça ne marche pa
    Le nom du type du contrôle ne dépend pas du répertoire où il se trouve... regarde le fichier .ascx.cs pour voir le nom de la classe

  16. #16
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    Ben justement c'est ce qui me choque car le nom de la classe est :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public partial class account_create : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
    }

    et lorsque je fais :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            if (Value == "account_create")
            {
                account_create ctl = new account_create();
                this.Controls.Add(ctl);
            }

    ça me donne :
    Erreur 1 Le type ou le nom d'espace de noms 'account_create' est introuvable (une directive using ou une référence d'assembly est-elle manquante*?)

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    c'est peut-être dans un autre namespace ?

  18. #18
    Membre du Club Avatar de Valter
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2008
    Messages : 113
    Points : 67
    Points
    67
    Par défaut
    C'est à dire ? les namespaces sont les même dans create.aspx.cs que dans head.aspx.cs par exemple.

    Merci,

Discussions similaires

  1. Problème url rewriting
    Par Generation-Web dans le forum Apache
    Réponses: 4
    Dernier message: 21/11/2008, 02h22
  2. problème URL Rewriting
    Par moxyy dans le forum Apache
    Réponses: 7
    Dernier message: 07/11/2008, 11h53
  3. Problèmes URL Rewriting
    Par mystar dans le forum Apache
    Réponses: 1
    Dernier message: 13/11/2007, 11h06
  4. [URL Rewriting] Problème URL Rewriting -> CSS
    Par Cartman.inc dans le forum Apache
    Réponses: 8
    Dernier message: 23/04/2007, 14h29
  5. Problème URL rewriting
    Par Zan dans le forum Apache
    Réponses: 4
    Dernier message: 24/11/2006, 19h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo