2012-01-30 25 views
1

我有一個Ajax表單,它將輸入數據發送到控制器。我目前有一個返回視圖的操作結果,並且ajax表單助手有一個它調用的「OnSuccess」函數。MVC3控制器動作以編程方式返回失敗的發佈請求

我想要做的是,如果在控制器中完成的驗證失敗,那麼將POST返回爲失敗,以便我可以使用AJAX助手中的OnFailure屬性來啓動另一個函數。這可能嗎?

此外,我不希望使用模型綁定/驗證方式,因爲我使用的模型很複雜,並不容易綁定。

回答

0

據我記得(只是剛回到Ajax助手),OnFailure被調用HTTP狀態錯誤,所以如果你讓你的視圖觸發其中之一,應該調用OnFailure函數,可能類似於下面的動作(逆着例外是特殊的,並使用一個非正統的狀態代碼(衝突)的想法,但你的想法):

throw new HttpException(409, "Validation error"); 

或者使用內置的HttpStatusCodeResult:

return new HttpStatusCodeResult(409, "Validation error"); 

或者,如果您還需要返回一些ctual內容:

Response.StatusCode = 409; 
Response.StatusDescription = "Validation error"; 
return WhateverResult(); 

最後,如果你使用的選項3有很多,你可以創建一個新的ActionResult (or ViewResult)子類來處理設置狀態代碼,並返回結果。

+0

如果我嘗試返回新的HttpStatusCodeResult(409,「驗證錯誤」); 我得到 錯誤無法隱式轉換類型 'System.Web.HttpException' 到 'System.Web.Mvc.ActionResult' – Scottingham 2012-01-30 21:16:26

+0

@Scottingham:確定嗎?沒有理由創建HttpStatusCodeResult會導致HttpException。 HttpStatusCodeResult派生自ActionResult,而不是HttpException。 如果你在混合例1和例2,即'返回新的HttpException(409,「驗證錯誤」);' – JimmiTh 2012-01-30 21:26:37

+0

Kaneda,你是對的!它運作良好,謝謝! – Scottingham 2012-01-30 22:28:14