allora, quel codice è sbagliato.
il codice corretto con l'esempio è questo:
codice:
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
For Each controllisulform As Control In Me.div1.Controls
'PrintLn(controllisulform.GetType().ToString())
If TypeOf controllisulform Is TextBox Then
Dim tb As TextBox = DirectCast(controllisulform, TextBox)
If tb.Text.Trim().Length = 0 Then
Me.Label1.Text = "COMPILARE TUTTI I CAMPI OBBLIGATORI"
End If
End If
Next
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Pagina senza titolo</title>
</head>
<body>
<form id="form1" runat="server">
<div id="div1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="" EnableViewState="false"></asp:Label>
</div>
</form>
</body>
</html>
come vedi, l'insieme controls, contiene tutti i controlli figli di primo livello, non quelli annidati più internament. E siccome i TextBox sono dentro un div, uso
For Each controllisulform As Control In Me.div1.Controls
invece di
For Each controllisulform As Control In Me.Controls
Inoltre, i controlli possono essere di più tipi. Il generico Control non ha la proprietà Text.
Perciò, prima si vede se il controllo è di tipo TextBox, poi si fa necessariamente il Cast e finalmente si mette l'avviso in una label, non in MSGBOX, che non esiste.