Проверка полей формы в ITemplate - PullRequest
0 голосов
/ 13 марта 2009

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

[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Template { 
  get { return template; }
  set { template = value; }
}

Элемент управления переопределяет CreateChildControls () и добавляет несколько HtmlGenericControls и элемент управления asp: Panel.

Фактическая фактическая реализация элемента управления выглядит примерно так:

<user:Frame runat="server">
   <Template>
      <asp:Literal runat="server" ID="SomeControl" Text="SomeValue" />                  
   </Template>
</user:Frame>

Хотя страница отображается так, как задумано, она имеет ряд последствий различной степени тяжести, включая:

  • На элементы управления, содержащиеся в шаблоне, нельзя ссылаться напрямую, и требуется FindControl. Это хорошо.
  • Мне не удалось использовать на них средства проверки.

Есть ли лучший способ создать мой пользовательский элемент управления? Или, возможно, просто способ заставить валидацию работать?

Ответы [ 2 ]

1 голос
/ 16 марта 2009

Один из способов получить валидацию для работы в этом случае состоит в программном добавлении элементов валидации. Например:

var c = parentControl.FindControl("id");

parentControl.Controls.AddAt(
   parentControl.Controls.IndexOf(c) + 1,
   new RequiredFieldValidator() { ControlToValidate = c.D });
1 голос
/ 16 марта 2009

По умолчанию платформа предполагает, что у вас может быть более одного шаблона в элементе управления, как, например, в Repeater. В вашем случае вы должны сообщить ему, что собираетесь использовать один шаблон, используя свойство TemplateInstance. Э.Г.

[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateInstance(TemplateInstance.Single)]
public ITemplate Template { 
  get { return template; }
  set { template = value; }
}

Это позволит вам напрямую ссылаться на шаблонные элементы управления, а также исправит проблемы с проверкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...