allora, quel codice è sbagliato.
il codice corretto con l'esempio è questo:
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, usocodice:<%@ 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>
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.
![]()

Rispondi quotando