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

时间:2015-08-06 15:38:29

标签: jquery asp.net ajax asp.net-mvc

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

韩国社交协会

2 个答案:

答案 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);
   }
}