Client-seitige Validierung in asp.net mvc
Ich bin ziemlich neu im asp.net MVC. Ich habe ein problem bei der Befestigung der client-Seite Fehler bei der Validierung die Validierung Zusammenfassung in MVC. Auf der client-Seite senden klicken Sie auf die Funktion, die validation-summary-errors div ist immer leer, auch wenn es Fehler bei der Validierung in form.
Lassen Sie mich im detail erklären, mit code-snippets.Das snippet, das ich habe ist mein Beispiel-Anwendung.
Habe ich aktiviert clientseitige Validierung in meiner Anwendung trhough web.config und enthalten die Standard-jquery-Validierungen Bibliothek in meinem layout-Seite.
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
MVC-Ansicht
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Registration Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
</li>
</ol>
<input type="submit" value="Register" id="btnSubmit" />
</fieldset>
}
View-Modell ist unten
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
Skript-Datei, die ich benutzt habe ist unten.
<script type="text/javascript">
$(function () {
$("#btnSubmit").click(function (e) {
e.preventDefault();
var errorSummary = $('.validation-summary-errors');
if (errorSummary.length == 0) {
$('#listError').remove();
$('<div class="validation-summary-errors"></div>').insertAfter($('.validation-summary-valid'));
$(".validation-summary-errors").append("<ul id='listError'><li>You cannot enter more than 20 characters.</li></ul>");
}
else if (errorSummary.length == 1) {
$('#listError').remove();
$(".validation-summary-errors").append("<ul id='listError'><li>You cannot enter more than 20 characters.</li></ul>");
}
return false;
});
});
</script>
Wenn ich nicht jquery submit klicken Sie auf Funktion, funktioniert alles einwandfrei, wie erwartet. Modell valiadtions ausgelöst werden, in der client-Seite auf "Absenden" klicken.
Zusätzlich zu Modell-Validierungen ich habe auch einige jquery client-side Validierungen müssen angehängt werden, um bestehende Liste der Validierung Zusammenfassung. Aber die "validation-summary-errors" div ist immer leer submit-Klick-Funktion. Also jedes mal, wenn die $('.validation-summary-errors').Länge ist 0.
Kann mir jemand helfen zu verstehen, wohin gehe ich falsch?
Aktualisierten code
$(function () {
$("#btnSubmit").click(function (e) {
var IsValid = validateForms();
if (!IsValid) {
e.preventDefault();
}
});
});
function validateForms() {
var blnValid = false;
var valMsg = ValidateDynamicControls();
if ($('#MemberForm').valid()) {
$(".validation-summary-errors").empty();
blnValid = true;
}
if (valMsg != '') {
blnValid = false;
var errorSummary = $('.validation-summary-errors')
if (errorSummary.length == 1 && errorSummary[0].innerHTML != '' && errorSummary[0].innerHTML != undefined) {
$(".validation-summary-errors ul").append(valMsg);
} else {
$('#listError').remove();
$('<div class="validation-summary-errors"></div>').insertAfter($('.validation-summary-valid'));
$(".validation-summary-errors").append("<ul id='listError'>" + valMsg + "</ul>");
}
}
return blnValid;
}
function ValidateDynamicControls() {
var strAliasValMsg = 'The string is not valid.';
return strAliasValMsg;
}
- Sie haben nie akzeptiert, eine Antwort auf Ihre Fragen? Das würde erklären, warum niemand auf der bit chomping, um Ihnen Antworten liefern...
- Ich verstehe. Das ist mein Fehler. Vorwärts gehen , werden es nie tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre ich bereit zu Wetten, dass Sie, dass Ihre
e.preventDefault();
undreturn false;
sind die Wurzeln Ihrer Probleme, da Sie unterdrücken die Vermehrung der Veranstaltung. Die jquery validation Bibliothek nie weiß, dass das Formular abgesendet wurde, weil Sie die Tötung der Veranstaltung, bevor es verarbeitet werden kann.Auch, Sie brauchen nicht beide
preventDefault
undreturn false
. In der Tat, Sie brauchen nicht entweder die ganze Zeit - in Ihrem Fall ist es wahrscheinlich besser geeignet, um zu rufenpreventDefault
tun und es bedingt.Aber wirklich, das ist wahrscheinlich nicht ausreichend, entweder. Wenn die enthaltenen Prüfungen sind nicht ausreichend, was Sie wirklich tun sollte ist die Umsetzung eines
CustomValidationAttribute
zusammen mit derIClientValidatable
- Schnittstelle. Das wird alles schön spielen client-und server-Seite. Sie finden viele Beispiele mit einem Google-oder Stackoverflow suchen, wie diese, zum Beispiel. Alternativ können Sie implementieren eine Remote-Validator, wenn die erste Lösung ist nicht bis zu der Aufgabe.