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 :

[C#] Faire hériter une page ASPX d'une autre


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut [C#] Faire hériter une page ASPX d'une autre
    Bonjour,

    J'ai un petit problème pour faire hériter une page ASPX d'une autre. En effet, cela fonctionne très bien quand mes deux pages sont dans le même répertoire mais pas si elles sont dans deux répertoires différents.
    J'ai trois fichiers :
    Ma super classe (à la racine de l'application) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public partial class PageVerification : System.Web.UI.Page {
        protected void Page_Init(object sender, EventArgs e) {
        }
    }
    Ma sous classe 1 (à la racine de l'application) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public partial class defaultConnect : PageVerification{
        protected void Page_Load(object sender, EventArgs e)    {
        }
    }
    Ma sous classe 2 (sous le répertoire transactions) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public partial class transactions_restauration : PageVerification{
        protected void Page_Load(object sender, EventArgs e)    {
        }
    }
    Voilà. Cela compile très bien pour la sous classe 1 mais pour la sous classe 2, j'ai l'erreur :
    The type or namespace name 'PageVerification' could not be found (are you missing a using directive or an assembly reference?)
    Vous savez pourquoi :
    Merci d'avance pour vos réponses.

    Stéphanie
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Par défaut, ta sous classe 2 a été créée dans le namespace [namespace de l'appli].Transactions.

    Il faut donc soit le changer en supprimant le .Transactions, soit ajouter une directive using [namespace de l'appli], soit indiquer le nom complet (avec namespace) de la classe dont tu hérites.


    Au passage, tes trois classes sont nommées selon trois normes différentes : PageVerification (Pascal, respecte la norme "officielle"), defaultConnect (Camel cased), transactions_restauration (nom avec underscore).
    Il faudrait peut-être harmoniser tout ça ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Mon application s'appelle EASY et que je mettes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    : EASY.PageVerification
    j'ai une erreur de compilation : l'erreur d'avant pour le premier et
    The type or namespace name 'PageVerification' does not exist in the namespace 'EASY' (are you missing an assembly reference?)
    pour le second.
    J'ai également essayer de forcer le namespace "EASY" à la partial class PageSeparation, mais cela fait également une erreur de compilation.

    Citation Envoyé par Wyatan
    soit le changer en supprimant le .Transactions
    Je n'ai nulle part un .Transactions !

    Sinon, en ce qui concerne le nommage, j'ai nommé mes aspx sans majuscule de début et sans underscore. Par contre, quand ces pages sont dans un sous répertoire, Visual me concatène le nom du repertoire au nom de la page avec un underscore.
    Pour ce qui est de PageVerification, j'ai mis une majuscule car elle représente pour moi une classe et non une page aspx.
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Montres nous le code ASP généré en entête de ta page transactions_restauration.aspx
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Mmm... Ok, mon expérience d'ASP.NET se limite au 1.1, et là, après avoir jeté un oeil à ton problème, je commence à comprendre pourquoi pas mal de gens estiment que l'équipe à l'origine du nouveau modèle de projet ASP.NET a dû abuser de substances illicites...

    Une solution et des explications dans cet article par exemple.

    Let’s presume for a second I wanted to subclass an existing page and use it for a custom class like this:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public partial class UploadItemPictureEx : Westwind.WebStore.UploadItemPicture
    {
     
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
    }
    First off you’ll notice that VS.NET doesn’t show UploadItemPicture as an identified class (it’s black – it should be Teal colored text for a type name). If you try to run this page it fails too. ASP.NET complains that it can’t find Westwind.WebStore.UploadItemPicture. This even though it exists in the same assembly! You can’t reference other Page classes in your code like this. This is true whether the code is in the same assembly or not. If the UploadItemPicture.aspx page were in a different directory it would end up in a completely different assembly and not visible at all to the current assembly because it doesn’t receive a reference to any of the other directories.

    This is a pretty major change in the way ASP.NET works. There’s a workaround for this, but it’s not pretty:
    • Create a base class for your page and make it inherit from Page
    • Store this Page either in APP_CODE or in a separate assembly so it’s visible to your pages
    • Implement your Public interface on this base Page
    • Then create your Page and make it inherit from this base Page
    • Now when you need to cast, cast to the base type

    Yes, this is pretty ugly, but it works and it’s not too bad of a workaround once you know what to do. I doesn’t change the way you work much but it requires one additional class and remembering to expose the base methods and properties you want to access at the base class level. You still implement all your code at the UserControl level – the base class is merely there to give you the strongly typed base interface that you can use for Intellisense and getting the proper typecasting to access the interface without Reflection.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Fichier restauration.aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="restauration.aspx.cs" Inherits="transactions_restauration" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        </form>
    </body>
    </html>
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Pour ce qui est de PageVerification, j'ai mis une majuscule car elle représente pour moi une classe et non une page aspx
    Mais une page aspx EST une classe !
    Et ton code behind définit bien une classe, de toute façon :
    public partial class defaultConnect
    Par contre, quand ces pages sont dans un sous répertoire, Visual me concatène le nom du repertoire au nom de la page avec un underscore.
    Ce n'est pas parce qu'il le fait qu'il a raison !

  8. #8
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ne devrait-il pas y avoir un slash ?
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="../restauration.aspx.cs" Inherits="transactions_restauration" %
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par neguib
    Ne devrait-il pas y avoir un slash ?
    Je ne crois pas : le fichier .aspx.cs est placé dans le même répertoire que le aspx.
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Wyatan, je viens enfin de regarder la solution donnée dans l'article que tu a transmis et cela fonctionne.
    Il suffit donc de placer la classe dont on veut que les autres héritent dans le répertoire ASP.NET : "App_Code".

    Je remercie tout le monde pour vos réponses et votre aide.
    Stéphanie
    Pensez à mettre quand vous avez obtenu la réponse à votre question.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/11/2013, 14h24
  2. Réponses: 0
    Dernier message: 04/08/2010, 14h02
  3. afficher une page html à travers une page aspx
    Par sadem dans le forum ASP.NET
    Réponses: 6
    Dernier message: 05/03/2009, 14h16
  4. insérer une fonction javascript dans une page aspx
    Par intissar_g dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/06/2007, 10h20
  5. Réponses: 3
    Dernier message: 01/08/2006, 15h57

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