2010-09-29 7 views
4

J'ai quelques problèmes attraper les messages d'erreur d'un contrôleur via l'erreur .ajax. Le script est appelé par une fenêtre de dialogue jQuery UI Dialog. Toute aide serait appréciée.asp.net mvc erreur .ajax attraper

est ici l'extrait de code de mon contrôleur

  Response.StatusCode = (int)HttpStatusCode.BadRequest; 
      return Content("There was an error in your request.", MediaTypeNames.Text.Plain); 

et voici le script jQuery:

function submitFormWithAjax(form) { 
    form = $(form); 
    $.ajax({ 
     url: form.attr('action'), 
     data: form.serialize(), 
     type: (form.attr('method')), 
     dataType: 'text', 
     error: function(data) { 
      $('#result').html(data); 
     }, 
     success: function(data) { 
      $('#result').html(data); 
      setTimeout("reloadPage()", 500); 
     } 
    }); 
    return false; 
} 

Le error: function(data) ne lit pas le message d'erreur renvoyé. Aucune suggestion?

Répondre

1

La signature du rappel d'erreur est function(xmlHttpRequest, textStatus, exceptionThrown).

Peut-être que vous regardez le mauvais paramètre?

+0

Merci, j'ai changé le code d'erreur: fonction (xmlHttpRequest, textStatus, exceptionThrown) et je peux accéder à xmlHttepRequest. Cependant, comment joindre mon message d'erreur dans le contrôleur? Je devine retourner le contenu ("il y avait une erreur dans votre demande.", MediaTypeNames.Text.Plain); n'est pas juste. – Dean

+0

Je ne suis pas vraiment familier avec ASP.NET MVC, mais je suppose que vous devez retourner une vue. C'est tout ce que je peux offrir jusqu'à présent. – Thomas

1

Essayez ceci:

function submitFormWithAjax(form) { 
    form = $(form); 
    $.ajax({ 
     url: form.attr('action'), 
     data: form.serialize(), 
     type: (form.attr('method')), 
     dataType: 'text', 
     error: function(data) { 
      $('#result').html(data); 
     }, 
     success: function(xmlHttpRequest, textStatus, exceptionThrown) { 
      $('#result').html(xmlHttpRequest.statusText); 
      setTimeout("reloadPage()", 500); 
     } 
    }); 
    return false; 
} 
1

Il doit y avoir quelque chose de retourner un BadRequest (erreur 400.) Le rappel d'erreur ne semble être appelée lorsque le code de retour est confli (erreur 409).

3

Merci pour l'aide de tout le monde. Je me suis dit qu'il après quelques essais, tout ce que je devais faire était ce jQuery

error: function(xhr, textStatus, exceptionThrown) { 
     $('#result').html(xhr.responseText); 
    }, 

et ce dans le contrôleur

  Response.StatusCode = (int)HttpStatusCode.BadRequest; 
      return Content("There was an error in your request."); 

Vive

+0

Problème avec ceci est s'il y a une exception lors du traitement, la page d'erreur complète html sera déversée dans votre div de résultat. – UpTheCreek