我们有一个ASP.NET MVC项目,我们使用jQuery.ajax将一些表单数据发布到控制器。在某些情况下,由于错误的SQL语句,被称为my的控制器方法会遇到异常。我想在TRY CATCH中处理异常,并将有关SQL语句被轰炸原因的详细信息传递给用户。因为我正在处理异常,所以jQuery.ajax帖子从服务器返回HTTP 200,因此似乎没有发生错误。如果我使用jQuery.ajax完整属性,似乎我可以查找异常细节并向用户显示,但我不知道如何从控制器端执行此操作。最初我在控制器端尝试过类似的东西:
Public Function IndexPost(formvalues as FormCollection) as ActionResult
Try
...
Catch ex as Exception
Dim sErr as String = "Exception occurred: " & ex.ToString
ViewData("PostResult") = sErr
End Try
Return View()
End Function
然后将其添加到我的jQuery.ajax帖子中:
complete: function (data) {
var postDataResult = "<%=ViewData("PostResult")%>";
if (postDataResult.length>2)
{
alert("Value of post result: " + postDataResult);
}
}
由于ajax调用,ViewData(“PostResult”)当然为空。
如何将结果传回我的控制器的ajax调用?
韩国社交协会
答案 0 :(得分:2)
在操作方法的响应中创建一个包装类,并在其上有一个IsSuccess
属性。在jQuery post success方法中,检查IsSuccess属性值并执行适当的操作。
让我们创建一个通用的包装器,它可以用于所有的viewmodel / response对象。
public class ApiResponse<T>
{
public bool IsSuccess { set; get; }
public string ErrorCode { set; get; }
public string Message { set; get; }
public T Data { set; get; }
}
现在在你的行动方法中,
public ActionResult Save(CustomerVM model)
{
var response=new ApiResponse<Customer>() { Data= new Customer() };
try
{
//Everythiing went good.
response.IsSuccess=true;
}
catch(Exception ex)
{
response.Message="Failed to save";
}
return Json(response,JsonRequestBehaviour.AllowGet);
}
在客户端
$.post("Save",{ "name" :"SSS"},function(r){
if(r.IsSuccess)
{
//Do something
}
else
{
//Error occured,
alert(r.Message);
}
});
答案 1 :(得分:1)
您可以使用“Json()”方法(一种“Controller”类方法)将json对象返回到您的ajax帖子。 Json方法需要一个对象,它将是你的ajax调用接收到的json对象。
我不知道VB语法,但它应该是这样的:
catch ex as Exception
Dim sErr as String = "Exception occurred: " & ex.ToString
Dim jsonObject= New With { .success = False, .errorMessage = sErr}
Return Json(jsonObject, JsonRequestBehavior.AllowGet)
End Try
然后,在javascript中你可以这样读:
complete: function (data) {
if(!data.success) {
alert("Error message: " + data.errorMessage);
}
}