6

作成中の「BasePage」オブジェクトのタイプを取得したいと考えています。すべての Page オブジェクトは BasePage に基づいています。たとえば、Login.aspx があり、コード ビハインドと Display メソッドを持つクラスがあります。

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(page.GetType());
}

私のプロジェクト構造には、デフォルトのリソース ファイルと疑似翻訳リソース ファイルがあります。私が設定した場合、次のようなものを試してください:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(typeof(Login));
}

翻訳されたページを返します。いくつかの調査の後、page.GetType().ToString() が「ASP_login.aspx」の効果に何かを返すことがわかりました「BasePage」から派生?

前もって感謝します!

4

4 に答える 4

6

コードビサイドが次のようになっている場合:

public partial class _Login : BasePage 
 { /* ... */ 
 }

次に、 でTypeオブジェクトを取得しますtypeof(_Login)。タイプを動的に取得するには、再帰的に見つけることができます。

Type GetCodeBehindType()
 { return getCodeBehindTypeRecursive(this.GetType());
 }

Type getCodeBehindTypeRecursive(Type t)
 { var baseType = t.BaseType;
   if (baseType == typeof(BasePage)) return t;
   else return getCodeBehindTypeRecursive(baseType);
 }
于 2008-10-14T17:35:41.143 に答える
3

さらに調査した結果、Page.GetType().BaseType を呼び出すと、Aspx ページのコード ビハインド タイプが返されることがわかりました。

于 2008-10-14T17:53:54.477 に答える
1

page.GetType().BaseType、それは以前にも言われましたが、その理由について詳しく説明しましょう。

Aspx ページはコード ビハインド ページから継承します。つまり、継承階層は次のようになります。

...
Page
BasePage
Login
ASP_Login

上が親で下が子です。

これにより、実際の aspx ページに関連して生成されたすべてのコードを基本クラス ページにコピーする必要なく、aspx ページからコード ビハインドにアクセスできるようになります。

于 2008-10-14T18:16:16.490 に答える
0

Display() をどこから呼び出しているかによって異なります。ASPX から呼び出す場合は、"ASP_login.aspx" を使用します。コード ビハインド (つまり Page_Load() メソッド) から呼び出している場合は、ログイン ページ タイプを取得する必要があります。

Page を渡す代わりに、Page プロパティ (つまり、this.Page.GetType()) を使用することを検討してください。これは、正しく思い出せば、常に現在のページ/コードビハインド タイプである必要があります。

また、この種のものを ASPX/コードビハインドから何らかのサービスに移動することを検討する可能性があることも指摘しておく必要があります。一般に、コード ビハインドで行うことを最小限に抑え、代わりにロジックをプレゼンター クラスにプッシュし、ASP.NET Web フォーム開発の MVP パターンに従うことをお勧めします。

于 2008-10-14T17:33:52.660 に答える