0

Ich arbeite an einem großen Formular, das ich suche, um die Benutzerfreundlichkeit zu verbessern, indem es in einen jQuery-Formular-Assistenten (jQuery-Registerkarten) unterteilt.ASP.NET MVC Behandlung Serverseite Validierung auf jQuery Form Wizard/Tabs

Ich habe bereits sowohl die clientseitige Validierung als auch die serverseitige Validierung implementiert. Die clientseitige Validierung wird in jedem Registerkartenbereich durchgeführt, bevor zum nächsten Registerkartenbereich gewechselt wird, und die serverseitige Validierung wird nur durchgeführt, sobald das Formular auf dem Server veröffentlicht wurde.

Die Sache, mit der ich Probleme habe, ist, wie man serverseitige Validierungsfehler am besten behandelt. Wenn das Formular derzeit auf dem Server veröffentlicht wird, gibt es das Formular zurück und zeigt alle Fehler an. Dies funktioniert jedoch nicht gut mit jQuery-Registerkarten, da das Registerkarten-Panel nach der Rückgabe des Formulars wieder in den Standardzustand zurückgesetzt wird.

Wenn das Formular serverseitige Validierung fehlschlägt, wie lade ich das Formular neu und zeige automatisch das Registerfeld, in dem sich die Eingaben befinden, bei denen die serverseitige Validierung fehlgeschlagen ist. Nehmen wir zum Beispiel an, ich habe drei Registerkarten in meinem Formularassistenten. Wenn eine Eingabe in der dritten Registerkartengruppe die serverseitige Überprüfung nicht bestanden hat, lade ich das Formular mit der dritten angezeigten Registerkarte erneut.

Ich habe versucht, die von Assistenten Server-Seite, wo jeder Abschnitt hat seine eigene Ansicht und Controller Aktion jedoch jedoch mit diesem Ansatz ist es viel schwieriger, eine Navigationsleiste zu erstellen zwischen dem Formularabschnitt zu erstellen.

+0

Dies ist kein triviales Problem, da es viele mögliche Szenarien sind. Zum Beispiel könnten Sie Fehler auf den Tabs 2 und 3 haben. Was dann? Mein Vorschlag zu Ihnen ist, Html.ValidationSummary zu verwenden, das oben auf der Seite zum Beispiel angezeigt würde und sich dann auf Benutzer verlassen würde, um das passende Tab zu finden, oder Sie können Validierungszusammenfassungsmitteilungen anpassen, um den Link zum Tab vielleicht zu enthalten? – Marko

+0

Ich würde lieber Validierungszusammenfassung vermeiden, da die Anzahl der Eingaben, die ich habe, die Dinge für den Benutzer schwieriger machen würde. – user2488275

Antwort

0

Ich hatte ein ähnliches Problem und ich folgende Lösung:

Beitrag Formulardaten über jquery ajax

$("#save").on("click", function (e) { 
     //clear error if exists before 
     var $form = $("#saveform");   
     $.post($form.attr("action"), $form.serialize(), function(result) { 
     if (result.ok) { 
      //handle success 
     } else { 
      handleError($form, result); 
     } 
     }); 
}); 

Validate Daten in der Server-Seite und json Ergebnis an den Client (ok oder Fehler) senden .

if (ModelState.IsValid) 
{ 
    return Json(new {ok = true}); 
} 
else 
{ 
    return Json(new {ok = false, errors= ModelState.Values.SelectMany(x => x.Errors)}); 
} 

Handle Ergebnis in Client-Seite (wenn alle Fehler zeigen in der Form hat und aktivieren Tab)

function handleError($form, result) { 
    for (var i = 0; i < result.errors.length; i++) { 
     var item = result.errors[i]; 
     for (var j = 0; j < item.MemberNames.length; j++) { 
      var input = $form.find("[name=" + item.MemberNames[j] + "]"); 
      var tab= input.closest(".tab"); 
      tab.addClass("active"); 
      //show error(near the input or in summary) 
     } 
    } 
} 
+0

Ich bin schließlich dazu gekommen, dies zu versuchen, und ich bin froh zu sagen, dass es funktioniert wie ein Charme, obwohl ich interessiert wäre zu wissen, wie Sie Client-seitige Validierung behandelt. Wie haben Sie bei der Anzeige serverseitiger Fehler die serverseitige Validierung automatisch ausgeblendet, wenn ein Benutzer Text in das Feld eingegeben hat, sodass die clientseitige Validierung übernehmen kann? Ein Ansatz besteht darin, einen jquery-Schlüssel einzurichten und Ereignisse zu ändern, die den serverseitigen Validierungsfehlerbereich für diese Eingabe entfernen. Ich frage mich nur, ob du näher kommst, kann sauberer sein. – user2488275

Verwandte Themen