Laden...

ASP.NET MVC Formular Validierung

Erstellt von Thomas vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.953 Views
T
Thomas Themenstarter:in
32 Beiträge seit 2004
vor 9 Jahren
ASP.NET MVC Formular Validierung

Hallo Leute

Gibt es eine brauchbare Clientseitige Validierung unter ASP.NET MVC?

Die standard Validierung scheint über jQuery zu funktionieren.

Nachteile:
Es muss die sprachabhängige Validierung per NuGet installiert werden und selbst dann bin ich mit dem Ergebnis nicht zufrieden:

  • Die Felder werden mit dem Variablennamen bezeichnet, blöd wenn die Variable englisch und die Bezeichnung im Formular deutsch ist.

  • Bei Gleitkommazahlen funktioniert zwar das Zeichen "," aber auch der ".", was dazu führt das man im Fall des Punktes einen falschen Wert in der Variable hat.

  • Wenn man versucht alle Fälle selbst zu definieren, kommen trotzdem immer wieder jQuery Meldungen durch.

Jetzt hab ich gelesen das HTML5 bereits Client Validierung kann.
Bei genauerer Betrachtung, funktioniert diese aber je nach Browser nur bedingt.

Bevor ich jetzt noch Tage weitere Versionen teste und dann schlussendlich vielleicht sogar selbst was schreibe was sicher ne menge Arbeit ist, wollte ich mal fragen was Ihr nützt und wie Ihr damit zufrieden seit.

Mir würde etwas vorschweben das sich rein auf die Anzeige beschränkt, die Prüfung und Formulierung der Texte würde ich gern selber machen, sofern es keine bessere Lösung gibt.

16.807 Beiträge seit 2008
vor 9 Jahren

Kurz und knapp: nein.

Warum:
a) weil wie der Name schon sagt es eine Client-Validierung ist und damit nichts mit ASP, einer Server-Technologie zutun hat und
b) weil es keine Allroundlösung gibt.
Eine Client-Validierung ist eine Kann-Anforderung (weil - außer HTML5 Checks - Javascript nötig).
Eine Server-Validierung ist eine Muss-Anforderung.

Ja, HTML5 kann nicht jeder Browser. Ja, HTML5 kann keine logischen Abhängigkeiten prüfen.
Du musst aber immer eine Server-Validierung umsetzen - das ist pflicht - eine Client-Validierung ist wie gesagt eine Kann-Lösung.
Und da führen viele Wege nach Rom. Ich mach das zB komplett alles via AngularJS; also MVVM.

Es gibt aber kein fertiges Framework für eine saubere, vollständige Client-Validierung. Weder für ASP, noch für PHP oder wie sie alle heißen.

T
Thomas Themenstarter:in
32 Beiträge seit 2004
vor 9 Jahren

Ok dann scheint mir HTML5 mit kleinen Tricks (pattern + title) der einfachste Ansatz.
Da hab ich jetzt eigentlich alles hinbekommen.

Für Serveranfragen kann man ja JavaScript verwenden. (Beispiel: Benutzername/E-Mail bereits verwendet.)


<html>
	<body>
		<script>
			function Password(input) {
			  if (input.value != document.getElementById('password').value) {
				input.setCustomValidity('The passwords must match.');
			  } else {
				// input is valid -- reset the error message
				input.setCustomValidity('');
			  }
			}
			
			function Request(input) {
				var xmlHttp = null;
				var Url = "response.html?name="+input.name+"&value="+input.value;
				xmlHttp = new XMLHttpRequest();
				xmlHttp.open( "GET", Url, false );
				xmlHttp.send( null );
				
				if (xmlHttp.responseText.length > 1) {
					input.setCustomValidity(xmlHttp.responseText);
				}
				else {
					input.setCustomValidity('');
				}
			}
		</script>

		<form>
			Username + Server-Request:<input type="text" name="UserName" oninput="Request(this)" required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			E-Mail + Server-Request:<input type="text" name="Mail" oninput="Request(this)" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}" title="Examples: alice@example.com, bob@example.com, .." required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			Required:<input type="text" name="name" required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			Password:<input type="password" id="password" name="name" required><br>
			<br>
			<br>
			Repeat:<input type="password" name="name" oninput="Password(this)" required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			E-Mail:<input type="text" name="name" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}" title="Examples: alice@example.com, bob@example.com, .." required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			URL:<input type="url" name="name" required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			Number:<input type="number" name="name" required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			IPv4:<input type="text" pattern="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" title="Examples: 127.0.0.1, 192.168.0.1, .." required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
		<form>
			Decimal:<input type="text" pattern="[0-9,]{1,}" title="Example: 123,45 (Comma: ,)" required><br>
			<br>
			<br>
			<input type="submit" value="Senden">
		</form>
	</body>
</html>