这是我的ajax电话
$.ajax({
type: "POST",
url: "MyMethod",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ Param1: 'value1', Param2: 'value2'}),
success: function (msg) { location.href = '@Url.Action("MyActionMethod", "MyController")'; },
error: function (msg) { alert(msg); }
});
这是我的模特
public class MyModel
{
public string Param1 { get; set; }
public string Param2 { get; set; }
}
MyMethod实现如下
public bool MyMethod(MyModel model)
{
if (!ValidateModel(model) )
{
// I want to error a descriptive error
return false;
}
// Some other processing
return true;
}
问题是我不知道它是如何确定呼叫是成功还是失败的。返回ture / false似乎没有帮助,因为代码总是进入成功代码路径(即它重定向到MyController.MyActionMethod)。任何想法我做错了
答案 0 :(得分:3)
这通常就是我所做的:
public JsonResult MyMethod(MyModel model)
{
var success = true;
var result = string.Empty;
if (!ValidateModel(model) )
{
// I want to error a descriptive error
success = false;
result = "Invalid model";
}
// Some other processing
return Json(new { success = success, error = result },
JsonRequestBehavior.Allow);
}
请注意从bool
到JsonResult
的退货方式的变化。然后在JavaScript中,您可以测试JSON对象上的属性:
...
success: function (msg) {
if (msg.success) {
location.href = '@Url.Action("MyActionMethod", "MyController")';
} else {
alert(msg.error);
}
},
...
答案 1 :(得分:1)
为了触发jQuery的error
处理程序,您需要返回HTTP错误
为此,请将Response.StatusCode
设置为400
(错误请求)。
或者,您可以从操作中返回JSON并在success
处理程序中读取属性对象以获取错误消息或URL。