2009-08-31 4 views
1

Salut je le code follwing dans mon default.aspx:Essayer de lancer et PagePrécédente d'accès valeurs

<asp:Button AccessKey="Y" Height="25px" runat="server" ID="myButton" 
    Text="hello" OnClick="clickit" PostBackUrl="~/Login/Default.aspx" /> 

et ce code dans mon code de connexion de page par défaut derrière:

 Default prev = PreviousPage as Default; 
     if (prev != null) 
     { 
      label1.Text = prev.GetText; 
     } 

Mais « prev «toujours est nulle, PagePrécédente est cependant pas nulle, quand j'ajoute cette derivitive à la page de connexion:

<%@ PreviousPageType VirtualPath="~/Default.aspx" %> 

Je reçois l'erreur S ystem.InvalidCastException: Impossible de convertir un objet de type 'ASP.default_aspx' en type 'Default'.

Quelqu'un sait ce qui se passe? Pourquoi prev est-il nul (et donc je ne peux accéder à aucune de ses valeurs)?

Répondre

0

Est-ce que votre page Default.aspx a un code-behind?

Si Default.aspx a un fichier code-behind, la classe de page sera généralement nommée _Default (avec un trait de soulignement), et non Default.

Si Default.aspx n'a pas de fichier code-behind alors je pense que la classe page sera généralement nommée ASP.default_aspx. Je soupçonne que c'est ce qui se passe dans votre cas.

Essayez de changer votre code à l'une des options suivantes et voir ce qui se passe:

// either 
ASP.default_aspx prev = PreviousPage as ASP.default_aspx; 

// or 
_Default prev = PreviousPage as _Default; 
1

Si vous avez besoin d'accéder au contenu ou à la fonctionnalité d'autres pages, je vous recommande fortement de créer des interfaces que ces pages mettent en œuvre. Cela permettra d'éviter le problème de devoir effectuer un cast sur des pages sous la forme de 'ASP.default_aspx'. Au lieu de cela, vous lancez vers une interface:

interface IPageWithBehaviorX 
{ 
    string SomeStringValue { get; } 

    void SomeOperation(); 
} 

public class Default: IPageWithBehaviorX 
{ 
    #region IPageWithBehaviorX Implementation 
    // ... implement interface here 
    #endregion 
} 

public class PageThatNeedsAccessToPreviousIPageWithBehaviorX 
{ 
    public void Page_Load(...) 
    { 
     IPageWithBehaviorX behaviorX = PreviousPage as IPageWithBehaviorX; 
     if (behaviorX != null) 
     { 
      // Do something with interface 
      var stringValue = behaviorX.SomeStringValue; 

      behaviorX.SomeOperation(); 
     } 

     // ... 
    } 
} 
Questions connexes