2017-03-20 2 views
0

Ich lade den Inhalt einer Teilansicht mit Ajax und Ausgabe der zurückgegebenen HTML direkt auf der Seite durch Auffüllen der HTML eines Div. Hier ist der Ajax:Formular geladen mit Teilansicht, zeige die Antwort

$.ajax({ 
        data: { productId: productId }, 
        datatype: "text/plain", 
        type: "GET", 
        url: theUrl, 
        cache: false, 
        success: function (data) { 
         $("#contentArea").html(data); 
        } 
       }); 

Dies funktioniert alles wie erwartet. Abhängig von einer Anzahl von Faktoren variiert das tatsächliche HTML in der Teilansicht und eines der möglichen Szenarien gibt ein Formular zurück, das nach einem Feedback fragt.

Ich habe die clientseitige Validierung an diesem Formular arbeiten, aber die serverseitige Validierung kooperiert nicht.

Meine Validierung ist FluentValidation und in meinem Controller habe ich diese paar Zeilen (MyValidator mein FluentValidation Validator ist und ordnungsgemäß funktioniert):

var valResult = myValidator.Validate(myRequest); 
if (!valResult.IsValid) return Redirect(Request.UrlReferrer); 

in dieser Halbzeit arbeitet, schlägt die IsValid Prüfung durch, wenn die Daten ungültig sind Aber dann lädt meine Weiterleitung einfach die Seite erneut, ohne dass die serverseitigen Validierungsnachrichten vorhanden sind. Vermutlich liegt das daran, dass ich eine Weiterleitung verwende.

Wie bekomme ich es die Seite neu zu laden, aber mit den Validierungsnachrichten an Ort und Stelle, da ich dieses Formular dynamisch mit Ajax laden?

Antwort

0

Sie müssen die Überprüfungsfehler zurück in Ihr ViewModel schreiben und diese an die Ansicht selbst zurücksenden. Ich mache es so:

var mailValidator = new Models.Dokumentacija.Validation.DokumentacijaMailValidation(); 
var mailValidatorResult = mailValidator.Validate(vm.MailPodatki); 
if (!mailValidatorResult.IsValid) 
{ 
    ModelState.Clear(); 
    foreach (var error in mailValidatorResult.Errors) ModelState.AddModelError(string.Format("MailPodatki.{0}", error.PropertyName), error.ErrorMessage); 
    return View(vm); 
} 

Sie dann Ihr Viewmodel (jetzt mit Fehlermeldungen) zurückgeben sollten, damit ich denke, Ihr Redirect wird nicht funktionieren. Können Sie eine return PartialView("_myPartial", vm); tun?

+0

Ich war in der Lage, mit den Validierungsfehlern zu arbeiten und zu ändern, wie ich sie zeigte, so dass ich dies als die Antwort markiert. Vielen Dank. –

Verwandte Themen