Benutzer mit den meisten Antworten
DropDownlists mit komplexer Validierung

Frage
-
Hallo zusammen,
ich habe eine Gridview welche mir Datensätze aus einer Datenbank darstellt.
Beim Klick auf Auswählen erscheinen für jeden selektierten Datensatz zwei DropDown Listen. Mit dem ersten kann ich eine Startposition wählen, mit dem zweiten eine Stopposition. Diese DropDown listen enthalten Werte von 1-x sowie eine "leere" Option, je nachdem wie viele Datensätze ich schon gewählt habe. Das ganze wird dynamisch per Codebehind erstellt.
Jetzt muss ich das ganze validieren: Die Stop-Position eines Control-Paars darf nicht vor der Start-Position liegen. Des Weiteren sollen keine bereits abgedeckten Wertebereiche erlaubt sein. D. h. wenn ich mit dem ersten Control-Paar den Bereich 1-5 ausgewählt habe, dann darf es mit dem zweiten Control-Paar nicht möglich sein, den Bereich 4-6 auszuwählen. 6-8 wäre aber wieder möglich?
Wie kann ich das machen? Ich habe über Javascript nachgedacht, wobei das sehr schwierig sein könnte, da die Controls ja alle per Codebehind erstellt werden, die Validation Controls finde ich gut, allerdings habe ich keine Idee, wie ich diese komplexe Prüfung damit abbilden könnte.
Hat irgendjemand eine Idee?
Grüße,
Stefan
Antworten
-
Hallo Stefan,
clientseitige Validierung darf immer nur "nice to have" sein. Denn sonst deaktiviert man einfach Javascript oder umgeht die Prüfroutine (bspw. per Firebug, ...) und kann sämtlichen Unfug zum Server senden, der dann ungeprüft verarbeitet würde.
Deine individuelle Validierung kannst Du mit einem CustomValidator machen. Siehe dazu:
http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.customvalidator.aspx
Das kann man mit einer clientseitigen Prüfung kombinieren. Letztendlich gibt es hier aber nichts hausgemachtes, die Prüflogik musst Du hier selbst einbauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert _Stefan_ Sonntag, 13. Januar 2013 20:39
-
Hallo Stefan,
der gedachte Weg ist eigentlich, dass Du bei einer solchen Validierung, die über x verschiedene Elemente gehen muss, genau das machst, was Du beschrieben hast: Durch alle Elemente laufen und die Prüfungen vornehmen. Ob Du nun nach der Prüfung ein Textfeld (besser wäre allerdings so oder so ein Hiddenfeld) mit einem Wert versiehst oder nicht, ist Geschmackssache. Wenn man auf die serverseitige Validierung verzichten will bzw. dort nicht nochmal die gesamte Prüfung durchlaufen will, wäre das ein gangbarer Weg.
Die Validation Controls sind für solch komplexe Prüfungen über x verschiedene Controls nicht vorgesehen, daher wirst Du um eine manuelle Prüfung mit eigener Logik nicht drumrumkommen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert _Stefan_ Sonntag, 13. Januar 2013 20:39
Alle Antworten
-
Hallo Stefan,
clientseitige Validierung darf immer nur "nice to have" sein. Denn sonst deaktiviert man einfach Javascript oder umgeht die Prüfroutine (bspw. per Firebug, ...) und kann sämtlichen Unfug zum Server senden, der dann ungeprüft verarbeitet würde.
Deine individuelle Validierung kannst Du mit einem CustomValidator machen. Siehe dazu:
http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.customvalidator.aspx
Das kann man mit einer clientseitigen Prüfung kombinieren. Letztendlich gibt es hier aber nichts hausgemachtes, die Prüflogik musst Du hier selbst einbauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert _Stefan_ Sonntag, 13. Januar 2013 20:39
-
Hallo Stefan,
ja, in diesem Fall geht es nur darum, den User zu unterstützen, Blödsinn kann er durch das Fehlen der Funktion nicht machen. Dennoch ist es wegen der Übersichtlichkeit doch eine wichtige Funktion.
Ja, die Frage die ich mir Stelle ist folgende:
Die Controls werden alle dynamisch erstellt, ein ControlToValidate (anfangs) nicht vorhanden. Später müssen Zahlreiche Prüfungen gemacht werden. Nicht nur, ob die Stop-Position nach der Start-Position liegt, vor allem die Prüfung der bereits abgedeckten Bereiche macht es schwer. Ich könnte programmatisch durch allle Elemente laufen und bei einem nicht erlaubten zustand ein false in ein Textfeld schreiben, welches vom CustomValidator überprüft wird, aber das ist ja bestimmt nicht der gedachte Weg. Oder mache ich mir mein Leben gerade zu schwer?Grüße & Danke!
Stefan -
Hallo Stefan,
der gedachte Weg ist eigentlich, dass Du bei einer solchen Validierung, die über x verschiedene Elemente gehen muss, genau das machst, was Du beschrieben hast: Durch alle Elemente laufen und die Prüfungen vornehmen. Ob Du nun nach der Prüfung ein Textfeld (besser wäre allerdings so oder so ein Hiddenfeld) mit einem Wert versiehst oder nicht, ist Geschmackssache. Wenn man auf die serverseitige Validierung verzichten will bzw. dort nicht nochmal die gesamte Prüfung durchlaufen will, wäre das ein gangbarer Weg.
Die Validation Controls sind für solch komplexe Prüfungen über x verschiedene Controls nicht vorgesehen, daher wirst Du um eine manuelle Prüfung mit eigener Logik nicht drumrumkommen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert _Stefan_ Sonntag, 13. Januar 2013 20:39