2012-01-26 8 views
1

私の現在の状況:1つのコードの後ろに1つしかないASCXファイルを2つ(またはそれ以上)作成することはできますか?

私は、A.ascx.csとB.ascxの背後にあるコードで、B.ascx.cs.の後ろにコードを持つユーザーコントロールA.ascxを持っています。 両方のコードビハインドファイルには、同様のコードが含まれています。たとえば、CSファイルを1つだけ作成したいとします。 C.asc であり、A.ascxおよびB.ascxによって使用され得る。

もちろん、C.csはA.ascxとB.ascxの内部で使用されたIDによるコントロールにアクセスできる必要があります。

これは可能ですか?

+0

はいApp_Codeフォルダ "c.Cs"にクラスファイルをseparely作成し、同様のコードをc.Csに移動して使用することができます。 – Madhu

答えて

3

いいえ、ただし、1つのクラスを作成して、両方のコードベースのクラスから使用できます。あなたはそのクラスにユーザーコントロールを渡し、IDでコントロールにアクセスできます。あなたは文句を言わないコントロールへのアクセスを入力した任意の場合

はこのような何かを:

両方のユーザーコントロール上にある子コントロールを定義し、ここであなたが子コントロールにアクセスすることができます

共通クラスおよびインタフェース:

/// <summary> 
    /// common controls 
    /// </summary> 
    public interface ICommonUserControl 
    { 
    TextBox TextBox1 { get; } 
    Label Label1 { get; } 
    } 

    public class CommonCode 
    { 
    private ICommonUserControl commonUC; 
    public CommonCode(ICommonUserControl uc) 
    { 
     this.commonUC = uc; 
    } 

    public void CommonWork() 
    { 
     this.commonUC.TextBox1.Text = "SomeText"; 
     this.commonUC.Label1.Text = "Other Text"; 
    } 
    } 

して、すべてのユーザーにこのような何か、あなたはICommonUserControlインタフェースを実装する必要がありますコントロール:

public partial class UC1 : System.Web.UI.UserControl, ICommonUserControl 
    { 
    public TextBox TextBox1 { get { return this.Uc1TextBox1; } } 
    public Label Label1 { get { return this.Uc1Label1; } } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    } 

そして、最後に、ここexampがありますル使用量:各ascxファイルは、(Webアプリケーションを書いている場合)のコントロールを参照するためにdesigner.csと相まって来るとC.csが同じと結合することがないかもしれないよう

Control uc1 = this.LoadControl("UC1.ascx"); 
    this.phParent1.Controls.Add(uc1); 
    Control uc2 = this.LoadControl("UC2.ascx"); 
    this.phParent2.Controls.Add(uc2); 

    CommonCode cc1 = new CommonCode(uc1 as ICommonUserControl); 
    cc1.CommonWork(); 
    CommonCode cc2 = new CommonCode(uc2 as ICommonUserControl); 
    cc2.CommonWork(); 
+0

この回答に感謝します。これをASCXファイルの中に統合/登録していますか? – Ferhat

+0

あなたが聞いたことを理解していないことを理解していれば、ICommonUserControlインターフェイスのバージョンを一般的なコントロールから定義しなければならず、共通のコードからアクセスする必要はなく、もちろんそのインターフェイスをすべてのユーザーコントロールに実装する必要があります –

0

がこれは本当にお勧めしませんascxから参照されているものとしてデザイナーファイルを作成します。

私のアドバイスでは、(UserControlから派生した)抽象クラスを作成し、そのクラスから両方のユーザーコントロールを派生させ、必要に応じて別注コントロールで渡す抽象クラスの共通コードを保持してください。

関連する問題