Eingabevalidierung mit ASP.NET 4.5 und Ajaxcontroltoolkit

Microsoft hat vor langer Zeit das Ajaxcontroltoolkit als Erweiterung zur Verfügung gestellt. Dies als Open Source. Darin enthalten sind jede Menge super Controls, die auf der Client Seite per JavaScript mit wenig Aufwand viel bewirken. Alternative wäre zb Jquery, aber eben Focus auf ASP.NET Web Server Controls.

Funktionell hat sich seit Jahren nichts mehr getan. Es wurden ein paar Bugs gefixt. Seit ein paar Tagen gibt es eine neue Version per Nuget von Stephen Walter, die speziell bei den Chart Controls ansetzt.

Gesagt getan, installiert und eine bestehende Web Anwendung geht nicht mehr. Wollen wir doch mal sehen warum.

Nach installieren des Pakets muss  in der Page die Referenz gesetzt werden

<%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" %>

Einer Textbox wird ein ValidatorControl (hier Required) zugewiesen. In einer Art Kette wird als nächstes ein ValidatorCalloutExtender Control dem Validator Control über seine ID zugewiesen.

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="Server" />
<asp:TextBox ID="TextBox1" runat="server" Width="134px"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="TextBox1"
ErrorMessage="unpassende Mail Adr."
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">*</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="TextBox1" runat="server" ErrorMessage="Feld darf nicht leer sein">*</asp:RequiredFieldValidator>
<asp:ValidatorCalloutExtender runat="Server" ID="extener1" Enabled="True" TargetControlID="RequiredFieldValidator1" Width="350px" HighlightCssClass="highlight" CssClass="customValidatorCalloutStyle" PopupPosition="Right" WarningIconImageUrl="images/alert.png" CloseImageUrl="images/close.png" />

Hier liegt auch schon grundlegender Fehler #2 vor. Ein Objekt (der Extender) hängt von Innereien (dem Validator) ab. Konkret vom erzeugten Java Script Code. Da nun ASP.NET 4.5 (jedenfalls bei mir) auf HTML 5 Validierung umstellt fällt der nötige Javascript Code weg. Es kommt zu einem Laufzeit Fehler.

Zur Behebung muss man das klassische Validierungsverhalten per Ajax erzwingen.

   UnobtrusiveValidationMode = UI.UnobtrusiveValidationMode.None

Da das Update des AjaxControlToolkit.dll Assemblies über den Paketmanager wenig transparent erfolgt, ist die Fehlersuche für den Entwickler schwierig. Es fehlt der Kontext zwischen Ursache und Wirkung. Fehler #1

Mein persönlicher Fehler #3 ist, das Microsoft sich hier aus der Verantwortung stielt und den Support für seine ASP.NET Plattform nicht gewährleistet.

Nun noch das Beispiel komplettieren mit dem CSS Styles

.customValidatorCalloutStylediv, .customValidatorCalloutStyle td{

border: solid 1px red;
font-size:120%;
background-color: silver;

color:White;

}

Das Ergebnis im Browser

image

Fazit: einige meiner Kollegen verabschieden sich von Nuget als Library Manager aus diesen Gründen. Für mich ist ein professioneller langfristiger Support von Tools und deren Qualität wichtiger als die Verfügbarkeit des Quellcodes.

Kommentare sind geschlossen