Установить codebehind публичное свойство напрямую из ascx - PullRequest
3 голосов
/ 26 июля 2011

У меня есть три пользовательских элемента управления: usercontrolA, usercontrolB и usercontrolC, которые все имеют один и тот же код , каждый из которых имеет:

<%@ Control Language="c#" AutoEventWireup="True" Codebehind="usercontrolA.ascx.cs" Inherits="usercontrolA" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> на вершине ascx.

В файле codebehind у меня есть публичное свойство с именем ShowAll.

Я знаю, что могу установить это свойство, когда помещаю элемент управления на страницу, например,

<uc1:usercontrolB ID="usercontrolB1" runat="server" ShowAll="true" />

Однако Я бы хотел, чтобы ShowAll всегда был установлен в true на usercontrolB , поэтому не нужно было бы устанавливать его каждый раз, когда он размещается на странице.

Я знаю, что могу добавить тег сценария в usercontrolB, чтобы установить ShowAll в Page_Load:

<script runat="server">
    protected void Page_Load(object sender, System.EventArgs e)
    {
        ShowAll = true;
    }
</script>

Но я хочу сохранить реализацию Page_Load, которая уже есть в коде. Есть ли другой способ автоматически установить это свойство для usercontrolB?

Редактировать: Если возможно, я бы хотел установить это в ascx, а не в коде, чтобы потом кто-нибудь еще мог добавить usercontrolD и установить ShowAll Значение true для всех случаев usercontrolD без необходимости заставлять меня изменять и перекомпилировать код позади.

Ответы [ 2 ]

5 голосов
/ 26 июля 2011

Вы должны установить это в конструкторе класса usercontrol.

public ConstructorClassName()
    {
       ShowAll = true;
    }

вот полный пример с кодом ...

public partial class WebUserControl : System.Web.UI.UserControl
{
  public WebUserControl()
  {
    ShowAll = true;
  }
  private bool _showAll;
  public bool ShowAll
  {
    get { return _showAll; }
    set { _showAll = value; }
  }   

  protected void Page_Load(object sender, EventArgs e)
  {
  }
}

Я установил значение по умолчанию в true, но вы также можете передать значение, где вы добавляете этот пользовательский элемент управления. например,

<uc1:usercontrolB ID="usercontrolB1" runat="server" ShowAll="false" />

Когда это вызывается, значение будет перезаписано на false

0 голосов
/ 26 июля 2011

В вашем коде вы можете проверить тип экземпляра:

protected void Page_Load(object sender, System.EventArgs e)
{
    if (this is usercontrolB) 
    {
         ShowAll = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...