是否可以创建两个(或更多)ASCX文件,只有一个代码隐藏在文件后面?

时间:2012-01-26 10:06:02

标签: asp.net code-behind 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访问控件。

这可能吗?

1 个答案:

答案 0 :(得分: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)
    {

    }
  }

最后这里是使用示例:

  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();