如何将数据从MVC控制器传递到jQuery.ajax
我们有一个ASP.NETMVC项目,其中我们使用jQuery.ajax将一些表单数据发布到控制器。在某些情况下,被调用的控制器方法由于错误的SQL语句而出现异常。我想在TRY-CATCH中处理这个异常,并将有关SQL语句崩溃原因的详细信息传递给用户。因为我正在处理异常,jQuery.ajax post正在从服务器返回HTTP 200,所以似乎没有发生错误。如果我使用jQuery.ajax complete属性,似乎可以查找异常详细信息并向用户显示,但我不确定如何从控制器端做到这一点。最初,我在控制器端尝试了类似的方法:如何将数据从MVC控制器传递到jQuery.ajax,jquery,asp.net,ajax,asp.net-mvc,Jquery,Asp.net,Ajax,Asp.net Mvc,我们有一个ASP.NETMVC项目,其中我们使用jQuery.ajax将一些表单数据发布到控制器。在某些情况下,被调用的控制器方法由于错误的SQL语句而出现异常。我想在TRY-CATCH中处理这个异常,并将有关SQL语句崩溃原因的详细信息传递给用户。因为我正在处理异常,jQuery.ajax post正在从服务器返回HTTP 200,所以似乎没有发生错误。如果我使用jQuery.ajax complete属性,似乎可以查找异常详细信息并向用户显示,但我不确定如何从控制器端做到这一点。最初,我在控
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);
}
}
完成:功能(数据){
var postDataResult=“”;
如果(postDataResult.length>2)
{
警报(“post结果值:+postDataResult”);
}
}
当然,由于ajax调用,ViewData(“PostResult”)为空
您知道如何将结果从控制器传回ajax调用吗
Tks您可以使用“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
complete: function (data) {
if(!data.success) {
alert("Error message: " + data.errorMessage);
}
}
然后,在javascript中,您可以这样阅读:
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
complete: function (data) {
if(!data.success) {
alert("Error message: " + data.errorMessage);
}
}
围绕操作方法的响应创建包装类,并在其上具有
issucess
属性。在jQuery post success方法中,检查issucess属性值并执行适当的操作
让我们创建一个可用于所有viewmodels/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; }
}
哦,非常好。工作得很漂亮。Tks