2011-12-22 21 views
2

でいくつかのページをbetweed。この場合、説明する記事へのリンクは大歓迎です。つの方法は、これはおそらく非常にラメ問題であり、私はASP.Netについての知識が不足しているASP.NET

私は分離コードとしてのC#でASP.NETのWebサイト上で働いています。私の現在のプロジェクトでは、非常に似通った機能を持つページはほとんど開発されておらず、多くの機能は同じです。たとえば、

​​

2ページで同じですか。他のいくつかのものも同様です。私はこれを共通の基底クラスに入れたいと思います。

private string GetAttachmentTempPath() 
{ 
    return Request.PhysicalApplicationPath + WebConfigurationManager.AppSettings.Get("AttachmentsTempFolder"); 
} 

私はAttachmentクラスにこれを移動したいと思いますが、アプリケーションの物理パスを取得するために、私はRequestオブジェクトを渡す必要があります。しかし、本当にのすべてのページに属していない他の機能がありますその方法には、それはオブジェクトとAttachmentクラスを結合するので、本当にいいです。

周りPage.Requestオブジェクトを渡すために必要とすることなく、どこか別の場所、これらの機能を移動する方法はあります?

p.s.アプリケーションは膨大で、アーキテクチャ全体を変更する余地はありません。

class BasePage : Page 
{ 
    ... 
    protected override OnInit() { 
    // do check here 
    } 
} 

は今、あなたはのOnInitは毎回あなたMyOtherPageがロードされ実行されます。このclass MyOtherPage : BasePage { ... } のようなページを実装できます。

+0

あなたはまだAttachmentクラスに置くことができます。添付ファイルのクラスメソッドは次のようになります。private static string GetAttachmentTempPath(string appPhysicalPath) - プロジェクト内のどこからでも呼び出すことができます - string attachmentTempPath = GetAttachmentTempPath(Request.PhysicalApplicationPath);このように、添付ファイルを処理するコードはすべてattacmentクラスに存在しますが、必要に応じて実際のデータを渡します(クラスを初期化するときにもこれを行うことができます)。 – dash

+0

オブジェクトを渡すことは実際にはHttpContext、IMHOに頼るよりも少数のカップリングです。 – sq33G

+0

ウェブサイトプロジェクトを使用している場合はbtwマイクロソフトの公式アドバイスは:http://msdn.microsoft.com/en-us/library/t990ks23.aspx – dash

答えて

2

はあなたの許可の事のためには、基本ページクラスを作ることができます。

あなたがここに完全なページのライフサイクルを見ることができます:あなたの他の問題についてはLink

を:

グローバル可能な静的ツールクラスを実装することを検討アップデート

のようなものを作るための良い方法より簡単にアクセスできるweb.configはシングルトンです。 asp.netでは、シングルトンは一度しか作成されず、aspワーカープロセスが停止するまで存続します。したがって、この値はasp.netアプリケーション全体で共有されます。これは

いつでもユーザーがページ要求(例えば、バージョン番号またはそのようなもの)

を作るもアップデート2あなたのデータベースから取得したり、ファイルにしたいいけないグローバルコンテキスト内のデータを格納するための良いです

は、すべての関数に渡すことなく、要求にアクセスするには、これを使用する:あなたはページの背後にある同様の機能を持っている場合、あなたはASP.NET WEb User Controlを使用することができます

HttpContext.Current.Request 
+0

はい、私は相続財産について考えました。しかし、アプリケーションには約50ページあり、すべてのページに異なる権限セット/その他の機能があります。私はこの2ページを同じパーミッションと機能を持つことができて幸運なことです。私はこれをどのように適合させることができると思います。ありがとう。静的ツールクラスに関しては、いくつかありますが、 'Request'オブジェクトをそのクラスに渡すのを避けるにはどうすればいいですか? – trailmax

+1

@ trailmaxあなたのアプリケーションに役割システムを実装することを検討するべきでしょう。リクエストオブジェクトについてのご質問は、私の更新された回答を再度ご覧ください。 – Grrbrr404

+0

役割システムは、来年の予定のリストにあります。アップデートありがとう – trailmax

1

ユーザーコントロールの関数を作成し、必要なページでコントロールを使用することができます。

てきたが、この記事で約Web User Control in Asp.Net

2

ベースのページを見てページレベルでの再利用可能なコードに適したオプションです。設定値のようなもの以外は、これらのメソッド専用のユーティリティクラスを用意するのがよいでしょう。あなたはこのクラスを通じて静的メンバを通じてASP.Netオブジェクトの多くにアクセスすることができますので、あなたはユーティリティメソッドのこれらの種類にPageオブジェクトを渡し避けるために必要がある場合は 、

HttpContext 

クラスには便利だろう。 HttpConext @ MSDN

+0

AHA! HttpContext - 私が欠けていたもの。どうもありがとう! – trailmax

関連する問題