jquery - 如何将数据从 MVC Controller 传递到 jQuery.ajax

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

我们有一个 ASP.NET MVC 项目,在其中我们使用 jQuery.ajax 将一些表单数据发送到 Controller 。在某些情况下,由于错误的 SQL 语句,调用的 Controller 方法会遇到异常。我想在 TRY CATCH 中处理异常,并将有关 SQL 语句失败原因的详细信息传回给用户。因为我正在处理异常,所以 jQuery.ajax 帖子从服务器返回 HTTP 200,因此似乎没有发生错误。如果我使用 jQuery.ajax 完整属性,似乎我能够查找异常详细信息并向用户显示,但我不确定如何从 Controller 端执行此操作。最初我在 Controller 端尝试了这样的事情:

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") 当然为 null。

有什么想法可以如何将结果从我的 Controller 传递回 ajax 调用吗?

谢谢

最佳答案

围绕操作方法的响应创建一个包装类,并在其上添加一个 IsSuccess 属性。在 jQuery post success 方法中,检查 IsSuccess 属性值并执行适当的操作。

让我们创建一个可用于所有 View 模型/响应对象的通用包装器。

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

关于jquery - 如何将数据从 MVC Controller 传递到 jQuery.ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860049/

相关文章:

php - 在服务器端对文件进行冗长处理之前,如何知道 ajax 文件上传何时完全完成

asp.net - 通过 web.config 授权仅允许匿名用户

javascript - 如何应用“加载更多”以在 WordPress 模板中获取自定义帖子

jquery - 鼠标悬停/鼠标离开 : 3rd image positioning and toggling on and off

jquery - 使用 live() - 好处 - 类似于 bind()

javascript - Array.prototype.slice,无法获取未定义的 'slice'?

c# - asp mvc 如何从我的根文件夹中提供图像/文件/视频?

ios - HTTP POST 方法使用 swift 为 azure web api 服务器返回 500 错误

python - 除了浏览器扩展之外,还有其他方法可以将 GUI 栏悬停在用户访问的任何网站上吗?

javascript - 将 AJAX 中的 javascript 请求发送到 C# 方法,无返回值、ASP.NET、MVC