我有问题将字典对象的返回列表提供给Jquery。我的要求是使用mvc Controller中 GetUser()获得的用户列表填充 userOptions 数组。以下$ .ajax调用返回错误。
var userOptions = new Array();
$.ajax({
url: '/User/GetUsers',
type: 'GET',
dataType: "json",
contentType: 'application/json; charset=utf-8',
async: false,
cache: false,
success: function(data){
$.each(data, function (id, user){
userOptions.push(user.NAME);
});
alert(userOptions);
},
error: function(xhr){
alert("Error:" + "Failed to retrieve.");
}
});
以下是mvc Controller中的方法。来自jquery的$ .ajax调用命中此方法,该方法也按预期返回用户列表,但是,在jquery 成功:函数(数据)失败,消息在错误:函数(xhr) 显示。
[HttpGet]
public JsonResult GetUsers()
{
List<tblUsers> usersList = userContext.Users;
var users = new List<Dictionary<Guid, string>>();
foreach (var u in usersList)
{
var userObj = new Dictionary<Guid, String>();
userObj.Add(u.ID, u.NAME);
users.Add(userObj);
}
return Json(new { JsonUsers = users }, JsonRequestBehavior.AllowGet);
}
我还用以下$ .getJSON调用替换了$ .ajax调用。结果是一样的。它没有成功 - 什么也没有回来。
var userOptions = new Array();
$.getJSON("/User/GetUsers",
function( data ){
$.each(data, function (id, user){
optionValues.push(user.NAME);
});
alert(userOptions);
});
我在这里缺少什么?非常感谢您的帮助。谢谢!
答案 0 :(得分:3)
目前还不清楚为什么你会想要一本字典。它可以简单地
[HttpGet]
public JsonResult GetUsers()
{
var data = userContext.Users.Select(u => new
{
ID = u.ID,
Name = u.NAME
});
return Json(data, JsonRequestBehavior.AllowGet);
}
在脚本中你可以使用
var userOptions = new Array();
// don't hard code your url's
$.getJSON('@Url.Action("GetUsers", "User")', function( data ){
$.each(data, function (index, user){
optionValues.push(user.Name);
});
});
附注:不清楚为什么在从未使用过时将用户ID值发送给客户端?
答案 1 :(得分:1)
解决:只需更改如下修复我的问题。谢谢@ Stephen!
[HttpGet]
public ActionResult GetUsers()
{
string strUsers = "";
var data = userContext.Users.Select(u => new
{
ID = u.ID,
Name = u.NAME
});
strUsers = string.Join(", ", data.Select(m => m.ID + ":" + m.Name).ToArray());
return Json(strUsers, JsonRequestBehavior.AllowGet);
}