2012-03-27 3 views
2

Два варианта торчат. OnSuccess и OnFailure. Это позволяет мне вызывать функции, если обновление страницы завершается успешно или завершается с ошибкой. Итак, у меня есть действие, которое вызывается, который отправляет и адрес электронной почты и имеет этот код ...Ajax.BeginForm (новый AjaxOptions {}) Исключения

try 
      { 
       // Code to send email 
       return Content("Your message has been successfully!", "text/html"); 
      } 
      catch (Exception ex) 
      { 
       return Content("An error occurred sending your message...", "text/html"); 
      } 

Проблема заключается в том, что даже если она попадает в Exception он до сих пор называет OnSuccess. То, что я хочу сделать, это вызвать другую функцию, когда она попадает в исключение. Как мне это сделать?

ответ

3

Обратный вызов OnFailure будет вызываться, если код состояния HTTP, возвращаемый сервером, не равен 200. В вашем примере в обоих случаях это 200. Вы рассмотрели исключение и проглотили его.

Итак:

catch (Exception ex) 
{     
    Response.StatusCode = 500; 
    return Content("An error occurred sending your message...", "text/html"); 
} 

, а затем:

function onFail(result) { 
    alert(result.responseText); 
}; 
+0

Кажется, что теперь, когда он терпит неудачу, когда я даю ему статус 500, он не выполняет UpdateTargetId в моих AjaxOptions, и я должен это сделать вручную. Это только огонь по успеху? –

0

В принципе, вы не устанавливаете статус ответа или сообщение об ошибке обратно клиенту. Также я собираю ваш прием JSON, вероятно, хорошая идея вернуть JSON. быть также известно IIS может проглотить исключения так, как в примере ниже, как показывает @Rob Стивенсон-Leggett:

Response.TrySkipIisCustomErrors = true 

Вот пример на StackOverflow из предыдущего вопроса: How to return correct response on error in ASP.NET MVC 3.0 via JSON?

надеюсь, что это помогает.

Смежные вопросы