2011-03-21 52 views
6

得到HttpStatusCodeResult的狀態說明我有一個表格使用Ajax.BeginForm()如何由JavaScript

<% using (Ajax.BeginForm("UpdateCompanyShop", "CompanyShop", FormMethod.Post, 
    new AjaxOptions { OnSuccess = "updateList", OnFailure = "onError", 
    UpdateTargetId="slist", LoadingElementId = "loading" })) 

控制器動作的代碼創建的象下面這樣:

if(string.IsNullOrEmpty(company.Address)) 
    return new HttpStatusCodeResult(418, "Please fill in address"); 
else if (company.DistrictID < 0) 
    return new HttpStatusCodeResult(418, "Please select district"); 
else 
    return new HttpStatusCodeResult(418, "Error saving data"); 

我AjaxOptions我用onFailure處= 「onerror的」有我這樣的客戶端腳本

function onError(response, status, error) { 
    var statusDescription = ***something***; 
    alert(statusDescription); 
} 

我在Jav中使用調試器aScript但找不到StatusDescriptionHttpStatusCodeResult中的第二個參數)

任何想法如何獲得狀態描述?或者我根本不應該使用HttpStatusCodeResult?在AJAX提交中返回錯誤(除了驗證)的正確方法是什麼?

回答

5

使用response.statusText

function onError(response, status, error) { 
    alert("Oops! " + response.statusText); 
} 

我寫了一篇文章,提供稍微詳細和幾個例子: Dealing with javascript or JSON results after an AJAX call with Ajax.ActionLink, unobtrusive AJAX and MVC 3

+2

塞爾吉,我使用調試器來檢查,有4個屬性。在我的情況下,它們的值readyState = 4,responseText =「」,status = 418和statusText =「error」,它們都不等於statusDescription字符串。 – newcoder 2011-03-21 16:05:58

+0

@newcoder - 我認爲這是因爲你沒有在你的MVC應用程序中使用不引人注意的JavaScript;拿起一個帖子:[ASP.NET MVC 3中的不顯眼Ajax](http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html) – 2011-03-21 16:54:28

+0

@Sergi Papaseit,我可以看到我如您的文章中提到的那樣,啓用了不引人注意的JavaScript。我也看到表單標籤正在使用data-ajax。唯一特別的是,ajax表單在一個部分視圖中,由動作鏈接動態加載。但是,除了返回HttpStatusCodeResult之外,一切正常。 – newcoder 2011-03-21 19:33:08

1

我有同樣的問題。我認爲statusDescription應該是JavaScript OnFailure處理程序中的response.responseText。當你做下面這個responseText不爲空,但國際海事組織的不是一個非常好的解決方案:

Response.StatusCode = 400; 
return Json("error message here", JsonRequestBehavior.AllowGet);