Datum, Textbox, Bootstrap, Modelbinding und die wunderbare Welt des Internets

Eigentlich wäre alles ganz cool. Der HTML5 Standard löst alle Probleme. Aber im Ernst, nicht mal Datumseingabe haben sie hinbekommen. Mit einem Input Type Date erwarten einen nicht nur optische Überraschungen.

image

image

Auch technisch ist das Datumsformat ein ungelöstes Problem der Menschheit. Obwohl 2002 im RFC3339 abschließend  geklärt, formatiert jeder Datum wie er will, Die meisten weichen im Web auf irgendwelche JavaScript Kalender PlugIns aus.

Ich will Standard!

Eine ASP.NET Webforms Textbox soll per Modelbinding an ein SQL Feld vom Typ Date gebunden werden. Leider gibt es beim Model Binding keine Converter wie bei WPF. Und leider kommt das Datum aus der Datenbank anders als es der Browser so will. YYYY-MM-DD.

Mit dem korrekten Modelbinding per Item.Feld lässt sich das Problem meiner Einschätzung nach nicht einfach lösen. Deswegen wechselt das ASPX Beispiel auf die ältere Form des Bind Kommandos. Dabei wird in ein Short Date Format ohne Uhrzeit umgewandelt. Mit dem Textmode Date erzeugt ASP.NET den passenden HTML INPUT Type date.

   1:  <div class="form-group">
   2:        <label for="ab">Ab</label>
   3:         <asp:TextBox ID="ab" CssClass="form-control" runat="server"
   4:           OnDataBinding="startdatum_DataBinding" TextMode="Date"
   5:         Text='<%# Bind("PromoStartDate", "{0:d}") %>'></asp:TextBox>
   6:  </div>

 

Allerdings ist das alles nichts ohne der Konvertierung vor der Bindung.

   1:   Protected Sub startdatum_DataBinding(sender As Object, e As EventArgs)
   2:          Dim txt = CType(sender, TextBox)
   3:             txt.Text = Date.Parse(txt.Text).ToString("yyyy-MM-dd")
   4:      End Sub

Mit diesem universellen Ansatz muss die Databinding Methode nur einmal geschrieben werden und kann an alle Textboxen mit Datum gebunden werden.

Datumseingaben werden so validiert ohne einen neue JavaScript Bibliothek einsetzen zu müssen. Internet Explorer 11 funktioniert, zeigt aber kein Kalender Popup.

Kommentare sind geschlossen