Control.NamingContainer Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает ссылку на контейнер именования элемента управления, создающий уникальное пространство имен для различения серверных элементов управления с одинаковыми значениями свойства ID.
public:
virtual property System::Web::UI::Control ^ NamingContainer { System::Web::UI::Control ^ get(); };
[System.ComponentModel.Browsable(false)]
public virtual System.Web.UI.Control NamingContainer { get; }
[System.ComponentModel.Browsable(false)]
[System.ComponentModel.Bindable(false)]
public virtual System.Web.UI.Control NamingContainer { get; }
[<System.ComponentModel.Browsable(false)>]
member this.NamingContainer : System.Web.UI.Control
[<System.ComponentModel.Browsable(false)>]
[<System.ComponentModel.Bindable(false)>]
member this.NamingContainer : System.Web.UI.Control
Public Overridable ReadOnly Property NamingContainer As Control
Значение свойства
Контейнер именования серверного элемента управления.
- Атрибуты
Примеры
В следующем примере показано использование NamingContainer свойства .
<% @ Import Namespace = "System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>
Control NamingContainer Example
</title>
<script language="C#" runat="server">
// Build the DataSource.
ICollection CreateDataSource()
{
DataTable myDataTable = new DataTable();
DataRow myDataRow;
myDataTable.Columns.Add(new DataColumn("EmployeeName", typeof(string)));
for (int i = 0; i < 10; i++)
{
myDataRow = myDataTable.NewRow();
myDataRow[0] = "somename" + i.ToString();
myDataTable.Rows.Add(myDataRow);
}
DataView myDataView = new DataView(myDataTable);
return myDataView;
}
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
// Bind 'DataView' to the DataSource.
myDataList.DataSource = CreateDataSource();
myDataList.DataBind();
}
// Attach EventHandler for SelectedIndexChanged event.
myDataList.SelectedIndexChanged += new EventHandler(selectedItemChanged);
}
// Handler function for 'SelectedIndexChanged' event.
void selectedItemChanged(Object sender,EventArgs e)
{
DataListItem myCurrentItem = myDataList.SelectedItem;
Control myNamingContainer = myCurrentItem.Controls[0].NamingContainer;
// Display the NamingContainer.
myLabel1.Text = "The NamingContainer is : " + myNamingContainer.UniqueID;
// Display the UniqueID.
myLabel2.Text = "The UniqueID is : " + ((Control)(myCurrentItem.Controls[0])).UniqueID;
}
</script>
</head>
<body>
<form runat="server" id="Form1">
<h3>
Control NamingContainer Example
</h3>
<h4>
Click an item to view it's Naming Container and UniqueID
</h4>
<asp:Label ID="myLabel1" Runat="server"></asp:Label>
<br />
<asp:Label ID="myLabel2" Runat="server"></asp:Label>
<br />
<asp:DataList id="myDataList" runat="server" BorderColor="black">
<HeaderStyle BackColor="#aaaadd"></HeaderStyle>
<SelectedItemStyle BackColor="lightgreen"></SelectedItemStyle>
<HeaderTemplate>
EmployeeName
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton id="button1" Text='<%# DataBinder.Eval(Container.DataItem, "EmployeeName") %>' CommandName="select" runat="server" />
</ItemTemplate>
</asp:DataList>
</form>
</body>
</html>
<%@ Import Namespace = "System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>
Control NamingContainer Example
</title>
<script language="VB" runat="server">
' Build the DataSource.
Function CreateDataSource() As ICollection
Dim myDataTable As New DataTable()
Dim myDataRow As DataRow
myDataTable.Columns.Add(New DataColumn("EmployeeName", GetType(String)))
Dim i As Integer
For i = 0 To 9
myDataRow = myDataTable.NewRow()
myDataRow(0) = "somename" + i.ToString()
myDataTable.Rows.Add(myDataRow)
Next i
Dim myDataView As New DataView(myDataTable)
Return myDataView
End Function
Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack Then
' Bind 'DataView' to the DataSource.
myDataList.DataSource = CreateDataSource()
myDataList.DataBind()
End If
' Attach EventHandler for SelectedIndexChanged event.
AddHandler myDataList.SelectedIndexChanged, AddressOf selectedItemChanged
End Sub
' Handler function for 'SelectedIndexChanged' event.
Sub selectedItemChanged(sender As Object, e As EventArgs)
Dim myCurrentItem As DataListItem = myDataList.SelectedItem
Dim myNamingContainer As Control = myCurrentItem.Controls(0).NamingContainer
' Display the NamingContainer.
myLabel1.Text = "The NamingContainer is : " + myNamingContainer.UniqueID
' Display the UniqueID.
myLabel2.Text = "The UniqueID is : " + CType(myCurrentItem.Controls(0), Control).UniqueID
End Sub
</script>
</head>
<body>
<form runat="server" id="Form1">
<h3>
Control NamingContainer Example
</h3>
<h4>
Click an item to view it's Naming Container and UniqueID
</h4>
<asp:Label ID="myLabel1" Runat="server"></asp:Label>
<br />
<asp:Label ID="myLabel2" Runat="server"></asp:Label>
<br />
<asp:DataList id="myDataList" runat="server" BorderColor="black">
<HeaderStyle BackColor="#aaaadd"></HeaderStyle>
<SelectedItemStyle BackColor="lightgreen"></SelectedItemStyle>
<HeaderTemplate>
EmployeeName
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton id="button1" Text='<%# DataBinder.Eval(Container.DataItem, "EmployeeName") %>' CommandName="select" runat="server" />
</ItemTemplate>
</asp:DataList>
</form>
</body>
</html>
Комментарии
Каждая страница веб-приложения ASP.NET содержит иерархию элементов управления. Эта иерархия не зависит от того, создает ли элемент управления пользовательский интерфейс, видимый пользователю. Контейнер именования для данного элемента управления является родительским элементом управления над ним в иерархии, реализующей INamingContainer интерфейс . Серверный элемент управления, реализующий этот интерфейс, создает уникальное пространство имен для значений ID свойств дочерних серверных элементов управления. Чтобы получить ссылку на NamingContainer родительский контейнер, можно использовать свойство дочернего элемента управления контейнера именования.
Создание уникального пространства имен для серверных элементов управления особенно важно при привязке серверных веб-элементов управления к данным, таким как серверные Repeater элементы управления и DataList . Если несколько записей в источнике данных создают несколько экземпляров серверного элемента управления, который является дочерним элементом повторяющегося элемента управления, контейнер именования гарантирует, что каждый экземпляр этих дочерних элементов управления имеет UniqueID значения свойств, которые не конфликтуют. Контейнер именования по умолчанию для страницы — это экземпляр Page класса , который создается при запросе этой страницы.
Свойство ClientID содержит значение, отображаемое в виде атрибута id
элемента в разметке HTML. В зависимости от значения, присваиваемого свойству ClientIDMode , значение, создаваемое ClientID для свойства, может включать идентификатор NamingContainer объекта . Если задано значение ClientIDModeStatic, ClientID значение не включает идентификатор NamingContainer объекта . Если для параметра задано ClientIDMode значение AutoID или Predictable, ClientID значение будет включать идентификатор из NamingContainer объекта . Дополнительные сведения см. в разделе Идентификация элементов управления Web Forms.