TL;DR...
При создании [UserControl]
с одноразовыми шаблонами можно ли заставить серверные элементы управления, размещенные в этих шаблонах, отображать их id
без идентификаторов UserControl
или контейнера?
В моем веб-приложении ASP.NET я создал UserControl
с несколькими одноразовыми шаблонами (здесь я привел код только для одного из этих шаблонов)...
Public Class MyUserCtrl
Inherits System.Web.UI.UserControl
Private Class MyUserCtrlLiteralContainer
Inherits Control
Implements INamingContainer
End Class
<TemplateContainer(GetType(MyUserCtrlLiteralContainer)),
TemplateInstance(TemplateInstance.Single),
PersistenceMode(PersistenceMode.InnerProperty)>
Public Property FirstTemplate As ITemplate
Private Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Init
If FirstTemplate IsNot Nothing Then
Dim container As New MyUserCtrlLiteralContainer()
FirstTemplate.InstantiateIn(container)
plhFirst.Controls.Add(container)
End If
End Sub
End Class
(Обратите внимание, plhFirst
— это <asp:PlaceHolder>
в разметке)
Это пример элемента управления, используемого на странице (управляется страницей Master
)...
<asp:Content runat="server" ID="content" ContentPlaceHolderID="mainContent">
<uc1:MyUserCtrl runat="server" id="muc1">
<FirstTemplate>
<asp:Button runat="server" id="btnMyButton" />
</FirstTemplate>
</uc1:MyUserCtrl>
</asp:Content>
Когда <asp:Button>
отображается в HTML, id
элемента приводит к...
id="ctl00_content_muc1_ctl00_btnMyButton"
... где второй ctl00
— это идентификатор экземпляра MyUserCtrlLiteralContainer
.
Есть ли способ сделать так, чтобы id
элемента управления отображалось следующим образом? (Поэтому идентификатор контейнера не используется)
ctl00_content_muc1_btnMyButton
Или, что еще лучше, есть ли способ заставить id
элемента управления отображаться следующим образом? (Поэтому не используется ни идентификатор пользовательского элемента управления, ни контейнера)
ctl00_content_btnMyButton
В качестве альтернативы существует ли другой способ создания экземпляров элементов управления в UserControl
, который привел бы к одному из перечисленных выше результатов?
MyUserCtrlLiteralContainer
, и вместо этого свойства можно настроить с помощьюTemplateContainer(GetType(INamingContainer))
и создать экземпляр прямо в заполнителе... что приводит кctl00_content_muc1_btnMyButton
, что является большим шагом вперед. Я чувствую, что переход кctl00_content_btnMyButton
- это, вероятно, слишком далеко, но если у вас есть какие-либо идеи, пишите. А пока я предлагаю вам создать ответ с вашим предложением, чтобы я мог отдать вам должное, которого вы заслуживаете. - person freefaller   schedule 06.07.2017<asp:PlaceHolder>
в разметке UserControl, он будет жаловаться на дубликаты идентификаторов - что справедливо - person freefaller   schedule 06.07.2017