我似乎无法从JSONResult中解压字符串列表。
下面是控制器:
[HttpPost]
public JsonResult GetDescriptions(string incomingProjectName)
{
List<string> result = new List<string>();
using (SFEntities ctx = new SFEntities())
{
result = (from ct in ctx.SF_CLIENT_TASK
join cp in ctx.SF_CLIENT_PROJECT on ct.PROJECT equals cp.ID
where cp.NAMEX == incomingProjectName
select ct.DESCRIPTION).ToList();
}
return Json( result );
}下面是我的ajax方法:
$.ajax({
type: "POST",
url: "Home/GetDescriptions",
contentType: "application/json; charset=utf-8",
data: '{incomingProjectName : "projName"}',
dataType: "json",
success: function (msg) {
alert("msg: " + msg); // [Object object]
alert("msg: 2 string: " + msg.toString); // function toString() { [native code] }
var list = eval(msg);
alert("list: " + list); // blank
alert("list to string: " + list.toString); // function toString() { [native code] }
alert("list data: " + list.valueOf); // valueOf() { [native code] }
alert("msg[0]: " + msg[0]); // undefined
alert("list[0]: " + list[0]); // undefined
},
});在调试器中,我可以看到result的内容有一个很长的项目列表,但是无论我如何尝试在JavaScript中访问它,我都看不到它们。
是否有某种反序列化或提取方法我调用失败?
编辑:这似乎应该是一个样板的东西,但由于某种原因,我还没能在谷歌上搜索到很多这样做的例子……
编辑:这是我的最终(工作)代码:
$.ajax({
type: "POST",
url: "Home/GetDescriptions",
data: { incomingProjectName: projName },
success: function (msg) {
alert( "msg: " + msg );
},
error: function (msg) {
alert("Failed: " + msg.status + ": " + msg.statusText);
}下面是控制器代码:
public JsonResult GetDescriptions(string incomingProjectName)
{
List<string> result = new List<string>();
using (SFEntities ctx = new SFEntities())
{
result = (from ct in ctx.SF_CLIENT_TASK
join cp in ctx.SF_CLIENT_PROJECT on ct.PROJECT equals cp.ID
where cp.NAMEX == incomingProjectName
select ct.DESCRIPTION).ToList();
}
return Json( result );
}发布于 2012-08-22 21:31:06
我已经用下面的控制器方法测试了你的代码,它工作起来没有任何问题。
public JsonResult Test()
{
return Json(new List<string> {"a", "b"},JsonRequestBehavior.AllowGet);
}和JS代码:
$.ajax({
type: "POST",
url: "Home/Test",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
console.log("msg: " + msg); // [Object object]
console.log("msg: 2 string: " + msg.toString); // function toString() { [native code] }
var list = eval(msg);
console.log("list: " + list); // blank on your code
console.log("list to string: " + list.toString); // function toString() { [native code] }
console.log("list data: " + list.valueOf); // valueOf() { [native code] }
console.log("msg[0]: " + msg[0]); // undefined on your code
console.log("list[0]: " + list[0]); // undefined on your code
}
});以及成功方法的结果:
msg: a,b
msg: 2 string: function toString() { [native code] }
list: a,b
list to string: function toString() { [native code] }
list data: function valueOf() { [native code] }
msg[0]: a
list[0]: a我认为问题在于你的列表是空的,或者是序列化程序有问题。尝试在调试模式下查看Json结果内容。
更新:
要查看从控制器操作返回的数据,请删除[HttpPost]属性并在代码中将返回语句更改为return Json( result ,JsonRequestBehavior.AllowGet);,然后转到http://yoursite/controllername/GetDescriptions?incomingProjectName=projName查看返回的json。
发布于 2012-08-22 22:02:44
我会删除eval function,为什么它会在那里?如果你有数组,你应该能够像这样遍历它:
for(var m in msg)
{
alert(m[i]);
}https://stackoverflow.com/questions/12074167
复制相似问题