Wenn der Benutzer Eingaben durchführt die gegen die Regeln in der Datenbank verstossen wird einen Exception gefeuert. So wird eine äußert unschöne Seite für einen doppelten Primärschlüssel erzeugt. Um dies zu verhindern kann man in das Event des DataSource Controls das nach der Aktion ausgeführt wird Code platzieren. Dies sind zb Inserted, Deleted, Selected oder Updated. Dort kann man die Exception als behandelt markieren und weitere Aktionen durchführen zb den Modus ändern. Um den Fehler in ValidationSummary anzuzeigen habe ich noch ein CustomValidator Control in der Seite platziert dessen Eigenschaft IsValid im Fehlerfall auf false gesetzt wird.
Protected Sub AccessDataSource1_Inserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs)
If Not IsNothing(e.Exception) Then
e.ExceptionHandled = True
FormView1.DefaultMode = FormViewMode.Insert
CustomValidator1.IsValid = False
Else
FormView1.DefaultMode = FormViewMode.ReadOnly
End If
End Sub |
Viele Postings in Foren oder Blogs schreiben das dies so nicht möglich ist. Dabei muss man nur beachten das die beiden Validation Controls ausserhalb des FormView Controls platziert werden.
...</asp:AccessDataSource>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" Display=none
runat="server" ErrorMessage="Email Adresse bereits vorhanden">
</asp:CustomValidator> |
Auch wenn weitere Validator Controls im Formview Template z.B. InsertItemTemplate vorhanden sind, arbeiten die einwandfrei mit dem Validationsummary zusammen. Es wird also nur ein Summary Control benötigt