我目前的狀況:是否有可能創建兩個(或更多)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訪問控件。
這可能嗎?
我目前的狀況:是否有可能創建兩個(或更多)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訪問控件。
這可能嗎?
不,但您可以創建單個類,並使用它從兩個代碼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();
感謝您的回答,有什麼我需要考慮的在我的ASCX文件中整合/註冊這個? – Ferhat
不知道我明白你問的是什麼,你必須定義你的版本的ICommonUserControl接口與常用控件,你不會從通用代碼訪問,當然實現所有用戶控件的接口 –
這並不推薦使用,因爲每個ASCX將陸續加上designer.cs引用對照(如果寫入一個Web應用程序)和C.cs可以不與相同的連接設計器文件作爲從ascx引用的文件。
我的建議是,創建一個抽象類(派生自UserControl),並讓這兩個用戶控件都派生自該類,然後保持抽象類中的通用代碼在必要時傳入定製控件。
是的,你可以在App_Code文件夾「c.Cs」中分別創建一個類文件,並將類似的代碼移動到c.Cs並利用它... – Madhu