Ich habe eine einfache ASP.NET MVC-Aktion wie folgt:
public ActionResult Edit(EditPostViewModel data)
{
}
Sie EditPostViewModel
haben folgende Validierungsattribute:
[Display(Name = "...", Description = "...")]
[StringLength(100, MinimumLength = 3, ErrorMessage = "...")]
[Required()]
public string Title { get; set; }
In der Ansicht verwende ich die folgenden Helfer:
@Html.LabelFor(Model => Model.EditPostViewModel.Title, true)
@Html.TextBoxFor(Model => Model.EditPostViewModel.Title,
new { @class = "tb1", @Style = "width:400px;" })
Wenn ich auf einem Formular sende, dass dieses Textfeld in eine Validierung eingefügt wird, erfolgt dies zuerst auf dem Client und dann auf service ( ModelState.IsValid
).
Jetzt habe ich ein paar Fragen:
Kann dies stattdessen mit jQuery ajax submit verwendet werden? Ich entferne einfach das Formular und wenn ich auf die Schaltfläche "Senden" klicke, sammelt ein Javascript Daten und führt das aus
$.ajax
.Funktioniert die Serverseite
ModelState.IsValid
?Wie kann ich das Validierungsproblem an den Client zurückleiten und so präsentieren, als würde ich die build int validation (
@Html.ValidationSummary(true)
) verwenden?
Beispiel für einen Ajax-Aufruf:
function SendPost(actionPath) {
$.ajax({
url: actionPath,
type: 'POST',
dataType: 'json',
data:
{
Text: $('#EditPostViewModel_Text').val(),
Title: $('#EditPostViewModel_Title').val()
},
success: function (data) {
alert('success');
},
error: function () {
alert('error');
}
});
}
Bearbeiten 1:
Auf Seite enthalten:
<script src="/Scripts/jquery-1.7.1.min.js"></script>
<script src="/Scripts/jquery.validate.min.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>