Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据从MVC控制器传递到jQuery.ajax_Jquery_Asp.net_Ajax_Asp.net Mvc - Fatal编程技术网

如何将数据从MVC控制器传递到jQuery.ajax

如何将数据从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属性,似乎可以查找异常详细信息并向用户显示,但我不确定如何从控制器端做到这一点。最初,我在控

我们有一个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