首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据从MVC控制器传递到jQuery.ajax

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

Stack Overflow用户
提问于 2015-08-06 15:38:29
回答 2查看 2.6K关注 0票数 4

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

代码语言:javascript
复制
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帖子中:

代码语言:javascript
复制
complete: function (data) {
   var postDataResult = "<%=ViewData("PostResult")%>";
   if (postDataResult.length>2)
   {
      alert("Value of post result: " + postDataResult);
   }
}

当然,由于ajax调用,ViewData("PostResult")是空的。

有什么想法吗?如何从我的控制器将结果传递回ajax调用?

Tks

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-06 16:20:27

从操作方法中围绕您的响应创建一个包装类,并在IsSuccess (您的jQuery post成功方法)上有一个jQuery属性,检查IsSuccess属性值并执行适当的操作。

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

代码语言:javascript
复制
public class ApiResponse<T>
{
    public bool IsSuccess { set; get; }
    public string ErrorCode { set; get; }
    public string Message { set; get; }
    public T Data { set; get; }
}

在你的行动方法中,

代码语言:javascript
复制
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);
}

在客户端

代码语言:javascript
复制
$.post("Save",{ "name" :"SSS"},function(r){
  if(r.IsSuccess)
  {
    //Do something
  }
  else
  {
    //Error occured, 
   alert(r.Message);
  }
});
票数 3
EN

Stack Overflow用户

发布于 2015-08-06 16:06:05

您可以使用" json ()“方法(它是"Controller”类方法)将json对象返回到ajax post。Json方法需要一个对象,该对象将是ajax调用接收到的json对象。

我不知道VB语法,但它应该如下所示:

代码语言: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

然后,在javascript中,您可以这样阅读它:

代码语言:javascript
复制
complete: function (data) {
   if(!data.success) {
      alert("Error message: " + data.errorMessage);
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31860049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档