我正在使用jQuery $.post
將一些數據發佈到我的控制器內的ActionResult方法。當控制器中發生錯誤時,它應該在響應的responseText中返回錯誤消息,但它不起作用。ASP.NET MVC JsonResult沒有返回jQuery.post中的responseText失敗回調函數
該發佈請求正在擊中控制器。
回調函數fail
似乎被觸發。只是沒有得到返回的錯誤消息。不知道我在做什麼錯了?
這是jQuery的發佈數據:
var postData = ["1","2","3"];
$.post('/MyController/GetSomething', $.param(postData, true))
.done(function (data) {
alert('Done!');
})
.fail(function (xhr, textStatus, errorThrown) {
alert(xhr.responseText); //xhr.responseText is empty
});
});
控制器
public class MyController : BaseController
{
public ActionResult GetSomething(List ids)
{
try
{
GetSomeData(ids);
}
catch (Exception ex)
{
return ThrowJsonError(new Exception(String.Format("The following error occurred: {0}", ex.ToString())));
}
return RedirectToAction("Index");
}
}
public class BaseController : Controller
{
public JsonResult ThrowJsonError(Exception ex)
{
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
Response.StatusDescription = ex.Message;
return Json(new { Message = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
更新 有趣的是,如果我還可以將一些邏輯從出BaseController,進入myController的,我能夠得到理想的結果。
爲什麼會發生這種情況?
public class MyController : BaseController
{
public ActionResult GetSomething(List<string> ids)
{
try
{
GetSomeData(ids);
}
catch (Exception ex)
{
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
Response.StatusDescription = ex.Message;
return Json(new { Message = ex.Message }, JsonRequestBehavior.AllowGet);
}
return RedirectToAction("Index");
}
}
是否達到控制或之前給出一個錯誤 –
是的,這?確實達到了控制奧勒。如果在Controller中拋出異常,那麼'Message'不會返回爲'xhr.ResponseText =「」' – jgill09
如果你把alert(data.Message);提醒之前('完成!');發生了什麼? – DanielVorph