JsonResult用法请教

yaotomo 2014-12-25 05:04:41
使用ajax方法返回Json数据,一直报错,错误信息为“ajax方法Error!error”
请问JsonResult应该如何正确返回对象集合的序列化数据?

前台JS

$.ajax({
type: 'post',
url: '/admin/GetStuinfo',
dataType:'json',
success: function (data) {
alert("success");
},
error: function (textThrown, errorText) {
alert("ajax方法Error!" + errorText);
}
});


后台代码

public JsonResult GetStuinfo()
{
var result = from s in context.Student select s;

return Json(new { list = result});
}
...全文
2265 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangtuanli 2015-05-08
  • 打赏
  • 举报
回复
这是前台JS代码 function Select_ProblemTypeBind() { $("#select_ProblemType").empty(); $.getJSON( "../../XinZeng/GetProblemTypeOptions", {}, function (data) { $.each(data, function (i, item) { $("select_ProblemType").append("<option value='"+item["Value"]+"'>"+item["Text"]+"</option>"); }) showOrHid(); }); } 这是控制器的代码 public JsonResult GetProblemTypeOptions() { IList<SelectListItem> item = new List<SelectListItem>(); DataTable dtProblemType = new PublicReportSplInvestBLL().GetSpecialTitle(); if (dtProblemType.Rows.Count > 0) { foreach (DataRow dr in dtProblemType.Rows) { SelectListItem sli = new SelectListItem(); sli.Text = dr["specialtitlename"].ToString(); sli.Value = dr["specialtitle"].ToString(); item.Add(sli); } } return Json(item, JsonRequestBehavior.AllowGet); } 实现的功能是 动态加载下拉列表 你参考下
scboy2012 2014-12-30
  • 打赏
  • 举报
回复
引用 20 楼 yaotomo 的回复:
[quote=引用 18 楼 scboy2012 的回复:] html+=“tr”; }); $(heml).appendTo($("#sttable"));//将接收到的list 在table显示 } }
现在是根本进不到success事件中,一直进到error事件里[/quote] 叫你你把success 改成 success: function (data.list) { alert("success"); } 还有 方法前面加上[httppost]
骑猪看海 2014-12-29
  • 打赏
  • 举报
回复
断点JS,查看textThrown.responseText的具体错误提示
卷泥巴重来 2014-12-29
  • 打赏
  • 举报
回复
先看看jsonresult的使用方法!
。。。曹小胖 2014-12-29
  • 打赏
  • 举报
回复
你后台方法有没有加[httppost]啊?
scboy2012 2014-12-26
  • 打赏
  • 举报
回复
引用 16 楼 scboy2012 的回复:
前台 success:function(data){ alert(data.list) }//既然 你用的是function(data)那么 你用这个对象 接收过来 data.list
你list的数据就返回前台了 你要在页面显示 你可以这样写 后台 return json (new{ code=0,list=result }) 前台 你定义 一个变量 var html=“” //空 写一对table来显示 id="sttable" success: function (data){ if (code==0){ $.each(data.list,function(index ,values){ html+= "<tr valueid=\"" + index + "\">" html+="<td>"+values.name+“<\td>”;//name指的是你list里面的参数 你有几个参数 就按照这个格式写就行 html+=“tr”; }); $(heml).appendTo($("#sttable"));//将接收到的list 在table显示 } }
x556549 2014-12-26
  • 打赏
  • 举报
回复
在你的对象上面应该加[Serializable],可序列化!
scboy2012 2014-12-26
  • 打赏
  • 举报
回复
前台 success:function(data){ alert(data.list) }//既然 你用的是function(data)那么 你用这个对象 接收过来 data.list
天空丶蒋 2014-12-26
  • 打赏
  • 举报
回复
你的result不能序列化可能是关系比较复杂化,无法简单的去序列化,所以你得自己去序列化。 Json(result) ; 所以这样不能去简单的去序列化,你需要把result搞成简单的对象。
静静-风 2014-12-26
  • 打赏
  • 举报
回复
引用 10 楼 yaotomo 的回复:
只能序列化单个对象, 不能直接序列化对象集合吗? 我查到的结果是多条记录,不能用上述方法
我觉得你的用orm不能序列化的原因,你可以重新组装一个该集合传过去。
yaotomo 2014-12-26
  • 打赏
  • 举报
回复
引用 12 楼 u013254698 的回复:
这个是我用的c#MVC返回集合的,看看有没帮助?
我用下面四种方法都报错,直接执行error事件里的代码了

return Json(result);
return Json(result.ToList());
return Json(new{ list = result });
return Json(new{ list = result.ToList() });
查看result里有3条记录(student表一共就3条记录),且数据都正常,不用考虑结果集为空的情况
yaotomo 2014-12-26
  • 打赏
  • 举报
回复
引用 18 楼 scboy2012 的回复:
html+=“tr”; }); $(heml).appendTo($("#sttable"));//将接收到的list 在table显示 } }
现在是根本进不到success事件中,一直进到error事件里
yaotomo 2014-12-26
  • 打赏
  • 举报
回复
引用 17 楼 x556549 的回复:
在你的对象上面应该加[Serializable],可序列化!
没想到用ef生成的实体也需要手工加可序列化特性,可是加上仍然报错。。。
信仰诠释过往 2014-12-25
  • 打赏
  • 举报
回复
   var list = this.businessManagerService.BusinessUnitMaster_SearchList(ref total, page, rows, businessUnitMasterYWNO, businessUnitMasterHTNO, boo, this.User.Identity.Name,SSGZ).ToList();
            list = list ?? new List<BusinessUnitMasterDTO>();

            var result = new { total = total, rows = list.ToList() };
            return Json(result);
这个是我用的c#MVC返回集合的,看看有没帮助?
yaotomo 2014-12-25
  • 打赏
  • 举报
回复
引用 9 楼 u013053259 的回复:
你再实例化一个对象然后在一个一个的赋值,把新对象传过来!
直接返回Json(new{name="abc",age=18})前台用data.name,data.age接收是没问题的。。
yaotomo 2014-12-25
  • 打赏
  • 举报
回复
只能序列化单个对象, 不能直接序列化对象集合吗? 我查到的结果是多条记录,不能用上述方法
静静-风 2014-12-25
  • 打赏
  • 举报
回复
引用 8 楼 yaotomo 的回复:
[quote=引用 5 楼 u013053259 的回复:]
return Json(result, JsonRequestBehavior.AllowGet);试一试
你用的是orm吗?


我用的ef框架,是orm。不过打算只返回部分字段,不想新建model了,不知道能不能用JsonResult序列化。
原来用get方式,并且加上JsonRequestBehavior.AllowGet参数也不行,才改成post方式的[/quote]


你再实例化一个对象然后在一个一个的赋值,把新对象传过来!
yaotomo 2014-12-25
  • 打赏
  • 举报
回复
引用 5 楼 u013053259 的回复:
return Json(result, JsonRequestBehavior.AllowGet);试一试 你用的是orm吗?
我用的ef框架,是orm。不过打算只返回部分字段,不想新建model了,不知道能不能用JsonResult序列化。 原来用get方式,并且加上JsonRequestBehavior.AllowGet参数也不行,才改成post方式的
静静-风 2014-12-25
  • 打赏
  • 举报
回复
引用 5 楼 u013053259 的回复:
return Json(result, JsonRequestBehavior.AllowGet);试一试 你用的是orm吗?
没看清楚,你用的是post啊!
静静-风 2014-12-25
  • 打赏
  • 举报
回复
引用 4 楼 yaotomo 的回复:
[quote=引用 3 楼 yinjianjing 的回复:] C#中有个序列化类,通过它可以返回JSON数据
你说的是System.Web.Script.Serialization;命名空间下的JavaScriptSerializer类吧,我知道那个。 现在学MVC,想学习一下JsonResult的用法[/quote] 用JSON不需要使用JavaScriptSerializer,用JavaScriptSerializer是将一个对象序列化成json字符串
加载更多回复(5)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧