Можно ли создать два (или более) ASCX-файла с одним кодом за файлом? - PullRequest
1 голос
/ 26 января 2012

Моя текущая ситуация:

У меня есть пользовательский элемент управления A.ascx с кодом позади A.ascx.cs и B.ascx с кодом позади B.ascx.cs. Оба кода за файлами содержат одинаковый код. Теперь я хочу создать только один файл CS, например C.cs которые могут быть использованы A.ascx и B.ascx.

Конечно, C.cs должен иметь доступ к элементам управления по идентификатору, который использовался внутри A.ascx и B.ascx.

Возможно ли это?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

Нет, но вы можете создать один класс и использовать его из обоих классов кодирования.Вы можете передать пользовательский элемент управления этому классу и элементы управления доступом по идентификатору.

Любой, если вы не печатали доступ к элементам управления, выполните что-то вроде этого:

общий класс и интерфейс, который определяет дочерние элементы управления, которые включеныи пользовательские элементы управления, и здесь вы можете получить доступ к дочерним элементам управления:

  /// <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();
0 голосов
/ 26 января 2012

Это на самом деле не рекомендуется, так как каждый ascx будет поставляться в сочетании с designer.cs для ссылки на элементы управления (если пишется веб-приложение), а C.cs может не соединяться с тем же файлом конструктора, что и файл, на который ссылаются изthe ascx.

Мой совет: создайте абстрактный класс (производный от UserControl) и сделайте так, чтобы оба пользовательских элемента управления были производными от этого класса, а затем просто оставьте общий код в абстрактном классе, передавая в случае необходимости специальные элементы управления.

...