ASP.NET Пользовательский несамозакрывающийся элемент управления - PullRequest
1 голос
/ 06 января 2010

Как при создании пользовательского элемента управления вы будете получать доступ к содержимому между открывающим и закрывающим тегами элемента управления?

<my:tag runat="server">
 <p>...markup</p>...
</my:tag>

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

Ответы [ 3 ]

2 голосов
/ 06 января 2010

Взгляните на this.Controls. Эта статья : http://msdn.microsoft.com/en-us/library/system.web.ui.control.controls(VS.71).aspx заявляет: «На странице ASP.NET, когда элементы управления добавляются декларативно между открывающим и закрывающим тегами серверного элемента управления, ASP.NET автоматически добавляет элементы управления в содержащую серверный элемент управления ControlCollection.»

Насколько я понимаю, если у вас есть

<yourcode:yourcontrol id="asdf" runat="server">
  <p id="innerP" runat="server">Text here</p>
</yourcode:yourcontrol>

Тогда можно было бы вызвать this.FindControl("innerP").text="Other text here, поскольку тег P генерируется на стороне сервера.

Однако, если у вас не установлен runat="server" для элемента P:

<yourcode:yourcontrol id="asdf" runat="server">
  <p id="innerP">Text here</p>
</yourcode:yourcontrol>

тогда вы можете найти его только через this.controls[0], поскольку весь контент будет отображаться в одном Literal элементе управления.

0 голосов
/ 06 января 2010

Если вы добавите идентификатор в тег my: tag, вы сможете получить доступ к элементам управления внутри него с помощью коллекции тегов .Controls.

0 голосов
/ 06 января 2010

Я думаю, вы хотите сделать это:

<my:tag runtat="server">
    <p><asp:Label id="markupLabel" runat="server"/></p>
</my:tag>

И из-за кода

markupLabel.text = "Foo";
...