Procedura: rispondere a eventi del controllo server Web Button
Aggiornamento: novembre 2007
Quando viene fatto clic su un controllo server Web Button, LinkButton o ImageButton, la pagina corrente viene inoltrata al server, dove viene elaborata.
Per rispondere a un evento Button
Creare un gestore eventi per uno degli eventi seguenti:
Evento Page_Load della pagina. Poiché il pulsante invia sempre la pagina al server, questo metodo viene sempre eseguito. Utilizzare l'evento Page_Load quando non è importante quale pulsante viene scelto, ma solo l'inoltro del form.
Evento Click del pulsante. Scrivere un gestore per questo evento quando è importante sapere quale pulsante è stato scelto.
Nota: Se si utilizza un controllo ImageButton e si desidera conoscere le coordinate x e y del clic dell'utente, creare un gestore eventi per questo evento. Per informazioni dettagliate, vedere Procedura: determinare le coordinate in un controllo server Web ImageButton.
Nell'esempio riportato di seguito viene illustrato come rispondere quando un utente fa clic su un controllo server Web Button. Il metodo visualizza un messaggio in un controllo server Web Label.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text="You clicked a button" End Sub
public void Button1_Click (object sender, System.EventArgs e) { Label1.Text="You clicked a button."; }
Nell'esempio riportato di seguito viene illustrato come rispondere alla scelta di un pulsante in un gestore eventi Page_Load. Il metodo esegue il test della proprietà IsPostBack della pagina per determinare se è la prima volta che si elabora la pagina o se questa è stata inoltrata mediante la scelta di un pulsante.
Private Sub Page_Load(ByVal Sender As System.Object, ByVal e _ As System.EventArgs) Handles MyBase.Load If Not IsPostback Then ' This is called the first time the page has loaded. ' The user will not have been able to click any buttons yet. Else ' This is called if the form has been posted back, possibly ' by a button click. Me.Label1.Text = "You clicked a button." End If End Sub
private void Page_Load(object sender, System.EventArgs e) { if (!IsPostBack) { // Evals true first time browser hits the page. } else { // This is called if the form has been posted back, possibly // by a button click. this.Label1.Text = "You clicked a button."; } }
L'esempio seguente illustra una calcolatrice di numeri interi a quattro funzioni. L'associazione di tutti i pulsanti (Add, Subtract, Multiply e Divide) allo stesso metodo consente di gestire tutti i calcoli da una sola posizione ed evitare codice ripetitivo. Questa associazione dei pulsanti al metodo Calculate viene effettuata mediante il metodo AddHandler in Visual Basic e mediante l'operatore += in C#. Per verificare che i valori immessi siano di tipo integer, aggiungere codice di gestione degli errori al metodo Calculate oppure utilizzare i controlli con convalida disponibili per i Web Form.
' Set the CommandName property of the buttons to "Add", ' "Subtract", "Multiply", and "Divide". Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler Me.btnAdd.Click, AddressOf Calculate AddHandler Me.btnSubtract.Click, AddressOf Calculate AddHandler Me.btnMultiply.Click, AddressOf Calculate AddHandler Me.btnDivide.Click, AddressOf Calculate End Sub Public Sub Calculate(ByVal sender As Object, ByVal e As System.EventArgs) Dim op1 As Integer = CType(Me.TextBox1.Text, Integer) Dim op2 As Integer = CType(Me.TextBox2.Text, Integer) Dim result As Integer Select Case CType(sender, Button).CommandName Case "Add" result = op1 + op2 Case "Subtract" result = op1 - op2 Case "Multiply" result = op1 * op2 Case "Divide" ' Divide two numbers and return an integer result. If op2 > 0 Then result = op1 \ op2 Else result = 0 End If Case Else ' Error handling code here. End Select Label1.Text = result.ToString() End Sub
// Set the CommandName property of the buttons to "Add", _ // "Subtract", "Multiply", and "Divide". protected void Page_Load(object sender, EventArgs e) { btnAdd.Click += new System.EventHandler(this.Calculate); btnSubtract.Click += new System.EventHandler(this.Calculate); btnMultiply.Click += new System.EventHandler(this.Calculate); btnDivide.Click += new System.EventHandler(this.Calculate); } protected void Calculate (object sender, System.EventArgs e) { int op1 = Convert.ToInt16(TextBox1.Text); int op2 = Convert.ToInt16(TextBox2.Text); int result = 0; switch(((Button)sender).CommandName) { case "Add" : result = op1 + op2; break; case "Subtract" : result = op1 - op2; break; case "Multiply" : result = op1 * op2; break; case "Divide" : // Integer division. if (op2 > 0) result = op1 / op2; else result = 0; break; default: // Error handling code here. break; } Label1.Text = result.ToString(); }