2016-03-26 16 views
0

Ich habe einen komplexen Typ, den ich zurückgeben, wenn ich verschiedene Operationen ausführen. Und ich möchte wissen, wie ich ein benutzerdefiniertes JSON-Objekt zurückgeben kann, um etwaige Fehler anzuzeigen. Betrachten Sie den folgenden CodeC# asp.net mvc benutzerdefinierte Fehlerbehandlung mit JSON

Business Layer

public ResultObject StartJob(string jobName){ 
    ... 
    return new ResultObject{ErrorMessage = "Job cannot be started due to ..."}; 
} 

-Controller

[HttpPost] 
public ActionResult StartJob(string jobName){ 
    var resultObject = BusinessLayer.StartJob(jobName); 

    if (resultObject.HasErrors){ 
     return Json(new {success = false, message = resultObject.message}, JsonRequestBehavior.AllowGet); 
    } 
    else{ 
     return Json(new {success = true}, JsonRequestBeahvior.AllowGet); 
    } 
} 

Wenn ich die Ajax-Post durchführen, obwohl mir Erfolg Rückkehr = false, ist die Ajax-Aufruf immer noch erfolgreich und jQuery nicht nennen error() -Methode.

Dieser Mustertyp wird mehrmals wiederholt.

+0

in diesem Fall den Wert der Erfolgsseite auf Client überprüfen und wenn der Wert falsch Ruf, was auch immer genannt worden wäre, in error() -Methode. 'if (data.success) {...} else {myerror (data.message);}' – Nkosi

+0

Jquery betrachtet Ihr benutzerdefiniertes JSON-Objekt-Erfolgsflag nicht, um zu ermitteln, ob der Aufruf erfolgreich war oder nicht, stattdessen sieht es den http-Status aus Code zurückgegeben. In Ihrer Instanz wird eine 200 OK-Antwort zurückgegeben, daher wird der Fehlerhandler nicht aufgerufen. Wie bei @Nkosi erwähnt, können Sie das data.success-Flag im Erfolgs-Handler Ihres ajax-Ereignisses überprüfen. – Macilquham

Antwort

1

Das "Problem" hier ist, dass der Ajax-Aufruf ein Erfolg ist. JQuery führt nur die 'error()' Methode aus, wenn der Ajax-Aufruf fehlschlägt. Sie sollten den Wert der Erfolgsvariablen auf dem Client-Seite Rückruf lesen und wenn es falsch nennen, ist dann ‚Fehler()‘ dh

if (!data.success) 
{ 
    error(); 
} 
+0

Ich denke, ich werde es einfach selbst handhaben, da es einfacher wird. Vielen Dank –

0

Sein Erfolg Ereignis gehen rufen Wenn Sie Fehlerereignis auslösen sollen dann werfen eine benutzerdefinierte Ausnahme dazwischen. Behalten Sie die Ausnahme nicht behandelt, es wird in den Fehlerbereich hineingehen.

error: function() { 
        ....... 
        ....... 
       } 

Oder wenn Sie es in Ajax Erfolg behandeln gehen für

success: function(data) { 

      if (!data.success) 
      { 
       error(); 
      }