我们有一个ASP.NET MVC项目,在这个项目中,我们使用jQuery.ajax将一些表单数据发布到控制器。在某些情况下,由于SQL语句错误,控制器方法被称为我的运行异常。我想在TRY中处理异常,并将有关SQL语句失败原因的详细信息传回给用户。因为我正在处理异常,所以jQuery.ajax帖子将从服务器得到一个HTTP200,因此似乎没有出现错误。如果我使用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调用?
Tks
发布于 2015-08-06 16:20:27
从操作方法中围绕您的响应创建一个包装类,并在IsSuccess (您的jQuery post成功方法)上有一个jQuery属性,检查IsSuccess属性值并执行适当的操作。
让我们创建一个通用包装器,它可以用于所有的视图模型/响应对象。
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);
}
});发布于 2015-08-06 16:06:05
您可以使用" json ()“方法(它是"Controller”类方法)将json对象返回到ajax post。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);
}
}https://stackoverflow.com/questions/31860049
复制相似问题