Webforms Client Validation

Ein Schulungsteilnehmer eines Web Forms Kurses vor zig Jahren, schreibt mir heute eine Mail mit folgender Einleitung

lange nicht mehr gesehen, wie geht’s denn so?

Ich habe ein kleines Problemchen,

Dabei war ein Stück ASP.NET Code, das so geschätzt vor 10 Jahren entstanden ist. Es muss heute um eine bestimmte Client Funktionalität ergänzt werden. Da der VB.NET Code sagen wir mal nicht mehr ganz State of the Art ist, habe ich das Problem prototypisch nachgebaut und auch gelöst.

Ein EingabeFeld wird mit einem Validator Control auf vorhandene Eingabewerte geprüft. Um einen Postback im Fehlerfalle zu verhindern, soll die Client Seitige JavaScript Validierung benutzt werden.

   1:  <form id="form1" runat="server">
   2:          <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
   3:          <div>
   4:              <asp:TextBox runat="server" ID="text1"></asp:TextBox>
   5:              <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="text1" runat="server"
   6:                  EnableClientScript="True"
   7:                  ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
   8:   
   9:              <asp:Button runat="server" Text="Button" OnClick="Unnamed1_Click"

Leider Pustekuchen. Die Validierung wird so weiter am Server ausgeführt.

Der Grund liegt in einer Änderung der JavaScript Library der ASP.NET Validator Controls mit der Version 4.5. Es wird nun auf JQuery gesetzt, statt auf die Microsoft Webforms JavaScript Bibliothek. Eigentlich ne gute Sache, wenn Jquery auch eingebunden ist. Falls das nicht geschehen soll kann man den alten Mode per Web.Config erzwingen.

   1:  <appSettings>
   2:      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
   3:    </appSettings>

image

Will man nun beim Click des Buttons zusätzliches JavaScript ausführen, stoßt man auf einen Konflikt. Die Client seitige validierung funktioniert nicht mehr und es wird wieder ein Postback zum Server ausgeführt.

Ein Blick in den gerenderten HTML Code offenbart das Problem. Ohne wird das OnClick Event von ASP.NET Page Life Cycle genutzt,

   1:      <input type="submit" name="ctl02" value="Button" 
   2:  onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(
   3:  &quot;ctl02&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" />
   4:   

In der ASPX Seite steht nun aber im Button zusätzliches JavaScript. In dem Fall um einen Meldung ala Wirklich Löschen? einzublenden.

Abhilfe schafft der manuelle Aufruf der client-seitigen Validierung per ClientValidate.

   1:   function YesNo() {
   2:   
   3:              if (Page_ClientValidate()) {
   4:                  if (confirm("YesNo?")) { return true; };
   5:             }
   6:              return false;
   7:    };
Kommentare sind geschlossen