Параметры свойств дочернего элемента в составном элементе управления на странице .aspx - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть составной элемент управления (class), который выставляет asp:Label через свойство get. Можно ли установить свойство Text метки через aspx-код?

Я бы хотел сделать что-то вроде этого: <cfw:MyCompositeControl runat="server" Label.Text="Test" />

Одним из решений является добавление каждого свойства в составной класс (например, общедоступный LabelText), но я бы хотел установить любое свойство любого дочернего элемента управления. Поэтому, когда станут доступны новые функции дочерних элементов управления, я бы хотел использовать их в своем составном элементе управления. Поэтому я бы хотел установить любое свойство открытого дочернего элемента управления .

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

Вы можете сделать это с внутренними свойствами:

[ParseChildren(ChildrenAsProperties = true)]
public partial class MyControl: UserControl
{

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public TestClass TestLabel
    {
         get;set;
    }
}
public class TestClass
{
    public string Field1
    { get; set; }
    public string Field2
    { get; set; }
}

Разметка:

<MyTag:MyControl runat="server">
    <TestLabel Field1="a" Field2="b" />
</MyTag:MyControl>

Я никогда раньше не делал этого с простым свойством - обычно вы используете коллекции,Играя с этим примером самостоятельно, в окне разметки Visual Studio позволит вам создать более одного экземпляра TestLabel внутри <MyTag:MyControl> - то есть, похоже, его не волнует, что это простое свойство.я полагаю, что если вы добавите более одной записи, то получится только последняя.

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

0 голосов
/ 28 февраля 2011

Вы должны предоставить открытое свойство, которое возвращает / устанавливает свойство Text метки. MSDN

Редактировать : Ваша идея получить доступ ко всем дочерним элементам управления составного элемента управления со страницы не рекомендуется:

  • Одним из подходов будет доступ к дочерним элементам управления через MyCompositeControl.FindControl(ID) (или методы расширения), что будет очень статичным и подверженным ошибкам, если вы захотите удалить элементы управления или изменить идентификаторы.
  • Другой подход заключается в том, чтобы сделать дочерние элементы управления общедоступными, но это также плохой дизайн, поскольку он открывает дверь для неправильного использования вашего элемента управления и также может быть проблематичным, если вы хотите изменить дочерние элементы управления и страницы уже обращаются к ним напрямую. *
0 голосов
/ 28 февраля 2011

Вам необходимо выставить его как свойство в классе составного элемента управления: -

public string LabelText
{
  get
  {
    return Label.Text;
  }
  set
  {
    Label.Text = value;
  }
}

Тогда вы можете управлять им из тега сервера, например: -

<cfw:MyCompositeControl runat="server" LabelText="Test" />
...