Di solito la faccio solo clientside (lo so non si dovrebbe) ma in questo caso devo usare un customvalidator e faccio la validazione anche serverside... finora però con "poca soddisfazione".
Ho due textbox per inserimento di PEC e codice univoco per fatt.elettronica.
Ho aggiunto un customvalidator che fa in controllo serverside che almeno uno dei due campi contenga qualcosa BUT la funzione che fa il controllo non viene mai chiamata e non so pecchè....
codice:
<asp:FormView ID="FormView1" runat="server" DefaultMode="Insert" DataKeyNames="an_ID" DataSourceID="SqlNuoviCli" OnItemInserted="formview_Inserted" OnItemUpdated="formview_updated">
<InsertItemTemplate>
...
<asp:TextBox ID="tb_emailpec" runat="server" Text='<%# Bind("an_emailpec") %>' ></asp:TextBox>
<asp:TextBox ID="tb_coduffpa" runat="server" Text='<%# Bind("an_coduffpa") %>' ></asp:TextBox>
<asp:CustomValidator ID="FEvalidator" runat="server" ControlToValidate="tb_emailpec" OnServerValidate="ValidaXFE" ErrorMessage="Email PEC o Codice Destinatario sono richiesti" ValidationGroup="newcli" Display="None"></asp:CustomValidator>
codebehind
Protected Sub ValidaXFE(sender As Object, e As ServerValidateEventArgs)
Dim risultato As Boolean = True
Try
Dim tbpec As TextBox = DirectCast(FormView1.FindControl("tb_emailpec"), TextBox)
Dim tbuni As TextBox = DirectCast(FormView1.FindControl("tb_coduffpa"), TextBox)
If (tbpec.Text = "" And tbuni.Text = "") Then
risultato = False
End If
Catch ex As Exception
risultato = False
End Try
e.IsValid = risultato
End Sub
La validazione lato server la lancio sull'evento inserting dell'sqldatasource agganciato al formview che contiene i controlli di cui sopra
codice:
Protected Sub SqlNuoviCli_Inserting(sender As Object, e As SqlDataSourceCommandEventArgs)
Page.Validate("newcli")
If Page.IsValid Then
....
End If
End Sub
e page è sempre valid anche se lascio i due textbox vuoti perchè dal debugger vedo che non entra proprio nella funzione di controllo del contenuto dei campi ValidaXFE... WARUM?