2010-03-13 4 views
1

J'ai une page asp.net avec une définition classe code-behind comme suit:Coulée type de page asp.net spécifique

public partial class examplepage : System.Web.UI.Page 

Je voudrais définir une propriété publique dans la page que je peux référence d'autres classes. Je crois comprendre que si je jetai à examplepage alors je devrais être en mesure d'obtenir à la propriété publique qui est spécifique à la page d'exemple, comme dans:

string test=((examplepage)HttpContext.Current.Handler).propertyX; 

Cependant, lorsque je tente coulée comme ci-dessus le compilateur ne reconnaît pas page d'exemple Quelqu'un peut-il me dire comment je peux lancer? Je n'ai aucun espace de noms spécifique défini.

Merci

+0

S'il vous plaît fournir le texte intégral de l'erreur du compilateur. – wRAR

+0

Est-ce que vous faites le casting dans le même assemblage que la page existe? – rmac

+0

@wRAR: Erreur Le type ou le nom de l'espace de nommage 'examplepage' est introuvable (vous manque une directive using ou une référence d'assembly?) – DEH

Répondre

2

Dans le cas où quelqu'un est intéressé ce qui suit est ce que je suis passé à:

public partial class examplepage : System.Web.UI.Page, ISomeStuff 

et

string test = ((ISomeStuff)HttpContext.Current.Handler).propertyX; 

Merci pour les gens de conseils

+0

Oui bien sûr, l'utilisation d'une interface. Si simple! – Radderz

+0

Cela fonctionne. Cependant, cela peut être plus simple. –

+0

... Cela fonctionne. Cependant, il peut être plus simple: Pour accéder à la valeur à partir d'un usercontrol (imbriqué n'importe quel niveau dans la page). Sur la page, j'expose le contrôle HiddenField hdnPersonID avec une propriété publique (get, set) (protégé ne fonctionnait pas) dans le code-behind de la page Info.aspx appelée PersonID. Dans un contrôle utilisateur, je peux accéder à la valeur de la page comme ceci: 2 lignes: (obtenir une référence de page, puis accéder à la propriété pubic NameSpace.Info infoPage = (NameSpace.Info) this.Page; string personID = infoPage.PersonID; Donc le PersonID est conservé au niveau de la page. –

0

Si votre classe est dans un autre espace de noms, vous devez spécifier l'espace de noms pour vos pages web:

string test = ((MyWebApp.examplepage)HttpContext.Current.Handler).propertyX; 
+0

Je n'ai pas de définition d'espace de noms. Tout le code pertinent n'a aucune déclaration d'espace de nommage. J'ai essayé d'en ajouter un mais ça n'a pas l'air d'aider, donc je l'ai enlevé. – DEH

+0

@DEH: Il peut y avoir un espace de noms implicite. Vérifiez les propriétés du projet Web pour voir s'il existe un espace de noms defualt. Vous pouvez également vérifier s'il existe un espace de noms ASP contenant les pages Web. – Guffa

+0

Merci - s'il vous plaît voir ma réponse re classes partielles. Une idée de comment je peux supprimer le mot clé partiel? – DEH

0

Je viens de lire que ASP.NET 2.0 ne prend pas en charge la coulée sur les classes partielles car au moment de la compilation, la classe "n'existe pas". En supposant que cela soit vrai, je voudrais supprimer le mot clé "partial" de la définition de la classe. Le compilateur ne me laissera pas faire cela, indiquant qu'une autre définition partielle existe ailleurs. Est-ce le concepteur? Quelqu'un sait-il comment je peux éviter les cours partiels afin que je puisse lancer comme je veux?

+0

Mais les classes partielles existent au moment de la compilation ... Je ne pense pas que tenter d'enlever "partial" va vous aider à résoudre votre problème. – rmac

+0

ASP.NET utilise des classes partielles pour placer les définitions de concepteur dans un fichier distinct. L'instruction que vous ne pouvez pas lancer des classes partielles est incorrecte, je l'ai juste essayé pour vérifier, et cela fonctionne très bien.L'erreur que vous obtenez est parce que la classe que vous essayez de lancer est inconnue, ce n'est pas parce que la distribution n'est pas autorisée. – Guffa