Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
È possibile scorrere la struttura di controlli su una pagina utilizzando la proprietà NamingContainer. A differenza della parola chiave Container, disponibile solo nel codice inline (ovvero in un'espressione dichiarativa <%# %>), la proprietà NamingContainer è disponibile nel codice per qualsiasi istanza della classe in oggetto o di una classe derivata.
Nell'esempio di codice riportato di seguito viene illustrato come scorrere la struttura di controlli di una pagina Web ASP.NET. Il gestore metodi ChangeBtn_Click del pulsante esegue la ricerca di un controllo denominato Message nel primo elemento di un controllo Repeater mediante il metodo FindControl e quindi determina l'oggetto NamingContainer per tale controllo. Determina anche il contenitore di denominazione per il controllo restituito dalla prima chiamata alla proprietà NamingContainer procedendo nella struttura di controlli fino a individuare un controllo per il quale non sia presente un contenitore di denominazione. Il metodo WalkContainers aggiunge, inoltre, il tipo di controllo al livello inferiore che non rappresenta un contenitore di denominazione.
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="head1" >
<title>NamingContainer Example</title>
</head>
<script language="vb" >
Dim list As ArrayList
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
list = New ArrayList
list.Add("One")
list.Add("Two")
list.Add("Three")
MyRepeater.DataSource = list
MyRepeater.DataBind()
End Sub
Private Sub ChangeBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim x As Control = MyRepeater.Items(0).FindControl("Message")
If Not x Is Nothing Then
list = WalkContainers(x)
End If
MyRepeater.DataSource = list
MyRepeater.DataBind()
End Sub
Private Function WalkContainers(ByVal ctl As Control) As ArrayList
Dim ret As New ArrayList
Dim parent As Control = ctl.NamingContainer
If Not parent Is Nothing Then
Dim sublist As ArrayList = WalkContainers(parent)
Dim j As Integer
For j = 0 To sublist.Count - 1
ret.Add(sublist(j))
Next
End If
ret.Add(ctl.GetType.Name)
Return ret
End Function
</script>
<body>
<form id="repeaterform" >
<h3>Using the NamingContainer Property to Determine a
Control's Naming Container
</h3>
<table id="mytable" width="80%">
<asp:repeater id="MyRepeater" >
<ItemTemplate>
<tr>
<td align="center" style="width:100%;">
<span id="message" >
<%#Container.DataItem%>
</span>
</td>
</tr>
</ItemTemplate>
</asp:repeater>
<tr>
<td align="center" style="width:100%;">
<input id="changebtn"
type="submit"
onserverclick="changebtn_click "
/>
</td>
</tr>
</table>
</form>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="head1" >
<title>NamingContainer Example</title>
</head>
<script language="c#" >
ArrayList list;
private void Page_Load(object sender, EventArgs e)
{
list = new ArrayList();
list.Add("One");
list.Add("Two");
list.Add("Three");
MyRepeater.DataSource = list;
MyRepeater.DataBind();
}
private void ChangeBtn_Click(object sender, EventArgs e)
{
Control x = MyRepeater.Items[0].FindControl("Message");
if (x != null) list = WalkContainers(x);
MyRepeater.DataSource = list;
MyRepeater.DataBind();
}
private ArrayList WalkContainers(Control ctl)
{
ArrayList ret = new ArrayList();
Control parent = ctl.NamingContainer;
if (parent != null)
{
ArrayList sublist = WalkContainers(parent);
for (int j = 0; j < sublist.Count; j++) ret.Add(sublist[j]);
}
ret.Add(ctl.GetType().Name);
return ret;
}
</script>
<body>
<form id="repeaterform" >
<h3>Using the NamingContainer Property to Determine a
Control's Naming Container
</h3>
<table id="mytable" width="80%">
<asp:repeater id="MyRepeater" >
<ItemTemplate>
<tr>
<td align="center" style="width:100%;">
<span id="message" >
<%#Container.DataItem%>
</span>
</td>
</tr>
</ItemTemplate>
</asp:repeater>
<tr>
<td align="center" style="width:100%;">
<input id="changebtn"
type="submit"
onserverclick="ChangeBtn_Click"
/>
</td>
</tr>
</table>
</form>
</body>
</html>