2012-01-26 58 views
1

我目前的狀況:是否有可能創建兩個(或更多)ASCX文件只有一個代碼隱藏文件?

我有一個用戶控件A.ascx,代碼位於A.ascx.cs和B.ascx之後,代碼位於B.ascx.cs.之後。 文件後面的代碼都包含相似的代碼。現在我只想創建一個CS文件,例如C.cs 可以被A.ascx和B.ascx使用。

當然,C.cs必須能夠通過在A.ascx和B.ascx中使用的ID訪問控件。

這可能嗎?

+0

是的,你可以在App_Code文件夾「c.Cs」中分別創建一個類文件,並將類似的代碼移動到c.Cs並利用它... – Madhu

回答

3

不,但您可以創建單個類,並使用它從兩個代碼behing類。您可以將用戶控件傳遞給該類,並通過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使用的文件:

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將陸續加上designer.cs引用對照(如果寫入一個Web應用程序)和C.cs可以不與相同的連接設計器文件作爲從ascx引用的文件。

我的建議是,創建一個抽象類(派生自UserControl),並讓這兩個用戶控件都派生自該類,然後保持抽象類中的通用代碼在必要時傳入定製控件。

相關問題