2009-01-02 101 views
31

這與我在how to handle errors from jQuery AJAX calls上的問題有關。有幾個回覆表明我使用「錯誤」回調來顯示來自jQuery AJAX調用的任何錯誤。我想知道如何使用ASP.NET MVC來做到這一點。有沒有一種方法可以讓我的控制器操作返回可從「錯誤」回調訪問的錯誤?客戶端代碼會是這個樣子:如何在使用ASP.NET MVC的jQuery AJAX調用中觸發「錯誤」回調?

$.ajax({ 
    type: "POST", 
    url: "MyUrl", 
    data: "val1=test", 
    success: function(result){ 
     // Do stuff 
    }, 
    error: function(request,status,errorThrown) { 

    } 
}); 

回答

21

注意:嘿,這是在ASP.Net MVC甚至達到1.0之前發佈的,從那以後我甚至沒有看過這個框架。你應該停止upvoting這個。


做這樣的事情:

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
actionResult = this.Content("Error message here"); 

狀態碼應該根據錯誤的性質發生變化;一般來說,4xx用於用戶生成的問題,5xx用於服務器端問題。

1

我認爲,事件引發了具有比其他200響應代碼,我不能在這個文檔中找到這方面的證據,雖然任何迴應。

從代碼中做到這一點(在Web表單工作):

throw new HttpException(500, "Error message"); 
+0

您如何從控制器操作發送200以外的響應代碼?假設我的控制器操作確定用戶沒有權限訪問該函數,並且我想返回200以外的響應代碼,以便實現「錯誤」回調。我將如何做到這一點? – 2009-01-02 18:46:47

+0

嗯,會拋出一個異常,從控制器行動做伎倆?這應該發回500響應代碼吧? – 2009-01-02 18:48:17

+0

編輯答案提供了一個可能的方式做 – 2009-01-02 18:51:34

1

this頁面,你只需要申請頭HTTP/1.0 500 Internal Server Error您的ASP.net頁面上。 $.ajax請求將捕獲該錯誤並執行error回調函數。 =]

8

如果您使用

[HandleError] 

然後拋出一個HttpException是要被抓住,送到您的自定義錯誤頁。

另一種選擇是使用

Response.StatusCode = 500; 
Response.Write("Error Message"); 
Response.End(); 

有可能寫這個更便捷的方式,但我還沒有在它尚未絆倒了。

7

如果你使用MVC 3,那麼你就可以返回控制器一個ActionResult具有HTTP狀態代碼和狀態消息一起:

return new HttpStatusCodeResult(500, "Error message"); 

然後,在你的錯誤回調:

error: function (request, textStatus, errorThrown) { 
    alert(request.statusText); 
} 
1

我向你發送建議;適用於有限制和不受控制的例外情況。

public class CodeExceptionToHttpFilter : FilterAttribute, IExceptionFilter 
{ 
    public CodeExceptionToHttpFilter() 
    { 
     Order = 2; 
    } 
    public void OnException(ExceptionContext filterContext) 
    { 
     var codeException = filterContext.Exception as CodeException; 
     var response = filterContext.RequestContext.HttpContext.Response; 
    response.StatusCode = (codeException == null)? 550: 551; 
     response.ContentType = MediaTypeNames.Text.Plain; 
     response.Charset = "utf-8"; 
     response.Write(filter.Exception.Message); 
     filterContext.ExceptionHandled = true; 
     response.TrySkipIisCustomErrors = true; 
    } 

}在我的博客

更多信息。 http://rodrigopb.wordpress.com/2012/11/28/gestion-de-errores-en-peticiones-ajax-a-mvc/

相關問題