2009-08-31 2 views
1

値こんにちは、私は私のdefault.aspxでfollwingコードがあります。キャストしようとアクセスPreviousPageは

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

と後ろの私のログインデフォルトのページのコードでこのコード:

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

しかし、「前のページログインページにこの導関数を追加すると、「常にnullです。ただし、PreviousPageはnullではありません。

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

エラーが発生します。 ystem.InvalidCastException: 'ASP.default_aspx'タイプのオブジェクトをキャストして 'Default'を入力できません。

誰でも知っていることを知っていますか?なぜprevはnullに設定されているのですか(そして私はその値にアクセスできません)?

答えて

0

Default.aspxページにコードビハインドファイルがありますか?

Default.aspxにコードビハインドファイルがある場合、ページクラスの名前は通常_Default(アンダースコア)で、Defaultではなくなります。

Default.aspxにコードビハインドファイルがない場合、ページクラスの名前は通常ASP.default_aspxと考えられます。私はこれがあなたのケースで起こっていると思う。

は、次のいずれかにあなたのコードを変更してみてくださいと何が起こるかを参照してください。

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

// or 
_Default prev = PreviousPage as _Default; 
1

あなたが他のページからのコンテンツや機能にアクセスする必要がある場合、私は非常にあなたがそれらのページが実装するインタフェースを作成お勧めします。これにより、 'ASP.default_aspx'の形式でページにキャストする必要があるという問題が緩和されます。代わりに、インターフェースにキャストします:

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(); 
     } 

     // ... 
    } 
} 
関連する問題