2012-01-30 49 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

相关问题