2009-03-09 26 views
3

がコンパイルされていない.aspxにある場合、1つのaspxに対して2つの部分クラスファイルを持つことは可能ですか?うん...それがコンパイルされていないか、私はちょうど対応のdllのチャックたいとポイントは議論の余地のようになります。パーシャルクラスはASP.Net複数のソースファイル

更新を定義している

 
    <%@ Page 
     Language="C#" 
     inherits="_Default" 
     src="Default.aspx.cs" 
     src="Default2.aspx.cs" %> 

デフォルトとDefault2両方:私のような何かをしようとしています/ binディレクトリに保存します。ソースを定期的に変更する必要があるため、これをコンパイルしないようにする必要があります。私はおそらくちょうどaspxを更新する方法を考え出すことができますが、私はそれを行う必要はありませんしたいと思います。

私が2つのソースファイルを使用している理由は、データベースとその他のものに接続するソースコードがたくさんあるからです。私にはDBのものとうんざりする人がいて、もう一つの人は他の論理と混乱しています。私はこれらのファイルを別々にして、見る必要のないコードを混乱させる必要がないようにしたいと考えています。

答えて

6

はい、いいえ。はい、できるだけ多くの部分クラスを持つことができます。いいえ、あなたはPageディレクティブでそれらを指定することはできません。 Default.aspx.csで

<%@ Page 
     Language="C#" 
     inherits="Default" %> 

public partial class Default 
{ /*yadda*/ } 

Default2.aspx.cs中:

public partial class Default 
{ /* even more yadda */ } 

部分クラスは、コンパイラの錯覚です。彼らはCLRに関する限り存在しません。 C#コンパイラは、コンパイル時にすべての部分クラスを結合します。 asp.netコンパイラの観点からは、Defaultクラスは1つしかありません。


あなたの必要とするものが複数の部分クラスではなく、コードをリファクタリングするように思えます。あなたは、部分クラスのアイディアを落とし、依存性注入/制御の逆転を行うべきです。 dbロジックとその他の関心領域を分離し、インタフェースを使用してそれらを定義し、実行時にDIコンテナフレームワークを使用してこれらの「プロバイダ」の実装を注入します。

これにより、コードが分離され、アプリケーションの柔軟性、テスト容易性、および更新の容易性が向上します。コードを2つ以上のファイルに分割するよりもずっと優れています。 DIは理解して実装するのがとても簡単です。 DIのためにUnityを使用しています。それをスピードアップするには約1日かかりました。

+1

私はそれを知っています。問題は、aspxページに2つの.csファイルがあることをどのように伝えるかです。 – Rob

+0

aspxページで2つの.csファイルがあることを知る必要があるのはなぜですか? –

+0

Mike:Src属性を使用して動的にコンパイルする必要があります。 CodeBehindのように、VSによってDLLにプリコンパイルされていないので、この方法は機能しません。 –

1

いいえ、たいていは単一のSrc属性を指定できます。

0

質問に直接答えはありませんが、コードをマージするためにベースページから継承したと考えていますか?あなたのDefault.aspx.csで

:あなたのCustomBasePage.csで

public partial class Default : CustomBasePage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

public class BasePage: System.Web.UI.Page 
{ 
    protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); 

     //Your custom code 
    } 
} 

あなたは、あなたのdefault.aspx.csになどのイベントのメソッドをオーバーライドする必要がある場合確かに基本メソッドを呼び出してください。

関連する問題