2016-04-24 11 views
0

Ich benutze jQuery und AJAX in der Ansicht, um einige Daten an den Controller zu senden, der es in die Datenbank schreibt. Bei Erfolg zeige ich ein div-Tag mit einem grünen Hintergrund mit "OK" -Text. Aber was passiert, wenn ich zuerst im Controller überprüfe, ob die Daten bereits in der Datenbank vorhanden sind, dann möchte ich den Benutzer darauf hinweisen, dass die Daten nicht hinzugefügt werden konnten. Gibt es eine Möglichkeit, irgendeine Art von Nachricht an das AJAX-Skript zurückzugeben?Übergeben Sie Nachricht von Controller zu AJAX-Skript in Ansicht

Ich denke, die Erfolgsoption ist nur eine Bestätigung des Kontakts mit dem Controller und nicht wirklich bestätigen, dass alles in Ordnung ist und die Daten in die Datenbank aufgenommen wurden !?

Mit welcher Aktion im Controller würde die Fehlerfunktion im AJAX-Code ausgeführt werden?

Schließlich frage ich mich nur, welche Art von Rendite ich verwenden sollte, da ich eigentlich nichts zurückgebe?

Mein Skript in der Ansicht:

 $.ajax({ 
     url: "/Orders/AddOrder", 
     type: "GET", 
     cache: false, 
     data: { a: order, b: seller }, 
     success: function() { 
      console.log('AJAX successful'); 

     // Show confirm message 
      $(".messageOk").show(); 
      $(".messageOk").text("OK").delay(2000).queue(function() { 
       location.reload(); 
      }); 
     }, 
     error: function() { 
     ???? 
     }, 
     complete: function() { 
     ???? 
     } 
    }); 

Controller:

 // Add new Resource 
    public ActionResult AddOrder(int a, int b) 
    { 
     var order = new Order 
     { 
      OrderNumber = a, 
      Seller = b 
     }; 

     db.Orders.Add(order); 
     db.SaveChanges(); 

     //return new EmptyResult(); 

     return RedirectToAction("Index", "Home"); // ?????? 
    } 

Antwort

1

Sie könnten den entsprechenden HTTP-Statuscode von Ihrer Controller-Aktion zurück: 409 Conflict.

if (the resource already exists in db) { 
    return new HttpStatusCodeResult(HttpStatusCode.Conflict); 
} 

die die error AJAX Funktion in denen auslösen könnten Sie überprüfen, ob Sie in dieser Situation sind und entsprechend handeln:

error: function(jqXHR) { 
    if (jqXHR.status == 409) { 
     alert('Sorry but this resource already exists'); 
    } 
} 

Wie Sie auf diese Weise sehen, kann es bis zu der Ansicht ist, zu entscheiden, was Angezeigte Fehlermeldungen basierend auf den richtigen HTTP-Statuscodes, die vom Server zurückgegeben werden. Auf diese Weise überlasten Sie den Server nicht mit View-Logik.

+0

In Fällen als JSON-String oder einfacher String sein können, wo ein 500 aufgrund mehrerer Gründe sein kann, könnten wir brauche eine Nachricht vom Server, um auf den Fehler hinzuweisen. Nun ist es an dem Typen, der die API konsumiert, ob er die gleiche Nachricht rendert oder eine Standardnachricht für alle 500s verwendet. Sie haben möglicherweise diesen Fehlercode und die Fehlermeldung gesehen, die mit vielen REST-APIs zurückgegeben wurde. – MohamedSanaulla

+0

Danke für die Antwort! Kann ich auch einen HTTP-Statuscode verwenden, um die vollständige Funktion auszulösen? Oder ist die Success-Funktion eine echte Bestätigung, dass ich eine Aufgabe erledigt habe oder nur etwas, das ausgelöst wird, wenn AJAX den Kontakt hergestellt hat? –

+0

Die vollständige Funktion wird ausgelöst, nachdem die Funktionen 'success' oder' error' aufgerufen wurden. –

0

Zusammen mit dem richtigen Antwort-Statuscode, können Sie in Ihren Antworttext-Fehlermeldungen vom Server übergeben auch

+0

Danke für Ihre Antwort! Ein kurzes Codebeispiel wäre schön zu verstehen, wie du meinst !? –

Verwandte Themen