2010-05-14 6 views
21

Ich benutze ASP.NET MVC mit jQuery. Ich habe die folgende MVC-Aktion, die eine Teilseite auf Erfolg zurückgibt. Auf Anwendungsfehler, ich bin nicht sicher, was es zu senden für sie auf der Client-Seite eine korrekte Abwicklung:Wie man einen Fehler in einem Ajax-Szenario zurückgibt

public ActionResult LoadFilterSet(int filterSetId) 
{ 
    try 
    { 
     BreadCrumbManager bcManager = this.ResetBreadCrumbManager(this.BreadCrumbManagerID); 
     GeneralHelper.LoadBreadCrumbManager(bcManager, filterSetId); 

     ViewData["BreadCrumbManager"] = bcManager; 
     return View("LoadFilterSet"); 
    } 
    catch (Exception ex) 
    { 
     return Content(""); 
    } 
} 

Folgende ist meine jQuery Ajax-Aufruf. Beachten Sie, dass ich nach der Datenlänge suche, um sicherzustellen, dass keine Fehler vorliegen. Bitte schlage mir einen besseren Weg vor, dies zu tun.

$.ajax({ 
    type: "GET", 
    dataType: "html", 
    async: true, 
    data: ({ filterSetId: selectedId }), 
    url: link, 
    contentType: "text/html; charset=utf-8", 
    success: function(data, textStatus) { 
     if (data.length > 0) { 
      // Clear the local filters first. 
      clearLocalFilters(); 
      $('td.selected-filters table.filters-display').append(data); 
     } 
    } 
}); 

Antwort

32

ich eine Fehlerfunktion hinzufügen würde in Ihrem Setup des Ajax Anrufs. Lassen Sie den Server die anzuzeigende Fehlermeldung ermitteln, übergeben Sie ihm den Ajax-Fehlerhandler und lassen Sie ihn anzeigen.

success: function(data, textStatus) {  
    // Clear the local filters first.  
    clearLocalFilters();  
    $('td.selected-filters table.filters-display').append(data);   
}, 
error: function (data) { 
    alert(data.responseText); // use any display logic here 
} 

In Ihrem Controller-Aktion, wenn ein Fehler

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
return Content(errorMessage, MediaTypeNames.Text.Plain); 
+0

Auslösen des Ajax-Fehlers macht den Trick. Ich mag diese Antwort. – mohang

+0

Was ist der Typ von 'Content'? Ich sehe es nicht in der Dokumentation. alles, was ich sehe, ist 'ContentResponse', das keinen statusCode,' HttpStatusCodeResult', der den Fehler in einer HTML-Seite umbricht, und 'System.Web.UI.WebControls.Content' enthält, was völlig anders ist – roo2

1

Ich glaube, Sie return Content(false.ToString().ToLower()); tun können, wenn ein Fehler ausgelöst wird, und dann prüfen, ob die Daten nicht falsch ist

if(data != false) 
{ 

    //do stuff 
} 

oder

if(!data) 
    alert("Error"); 
else 
{ 
    //do stuff 
} 
+0

Hallo Knepe gefunden wird, Dies ist mehr oder weniger das, was ich in der Erfolgsfunktion tue. Dies ermöglicht nur einen Fehlerfall. Wenn ich einen angemessenen Grund für das Scheitern geben möchte, wäre ich nicht in der Lage, dies auf elegante Weise mit dieser Methode zu tun. – mohang

Verwandte Themen