MVC5 通过 Jquery Ajax 返回通用对象列表

w2o*_*ves 1 c# ajax asp.net-mvc jquery

我正在尝试通过 jQuery Ajax 检索对象列表

我有一个这样的控制器方法:

[HttpGet]
public JsonResult GetAllStates(string listname = "")
{
     clsDdl ddl = new clsDdl();
     List<clsDdl> retval = new List<clsDdl>();
     ddl.id = "1";
     ddl.value = "Dropdown1";
     ddl.status = "DDL Status";
     ddl.attributes = "First Dropdown Text";
     retval.Add(ddl);

     //return retval;
     return Json(new
     {
         list = retval
     }, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

这是我试图返回的 Dropdown 类

public class clsDdl
{
    public string id { get; set; }
    public string value { get; set; }
    public string status { get; set; }
    public string attributes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,代码看起来像这样

 function LoadListItems (options) {

 var listname = options.listname;

$.ajax({
         type: "GET",
         url: url,
         data: JSON.stringify({
             listname: listname
         }),
         contentType: "application/json; charset=utf-8",
         async: true,
         success: function (result) {
            alert(result[0].value);
         },
         error: function (xhr, status, err) {
           alert(err.toString(), 'Error - LoadListItemsHelper');
         }
       });
Run Code Online (Sandbox Code Playgroud)

我的控制器动作被击中。但警报始终是“未定义”。我也试过

 success: function (data) {
                 var result = data.d;
                 for (var i = 0; i < result.length; i++) {
                 alert(result[i].attributes);
                 }
Run Code Online (Sandbox Code Playgroud)

那里也没有成功。我究竟做错了什么 ?

提前致谢...

Daw*_*wan 5

1. 您正在从服务器返回 JSON。您必须dataType在 Ajax 请求中设置为json

  1. contentType --> 数据发送到服务器

  2. dataType --> 从服务器返回的数据

AJAX 请求中的内容类型和数据类型是什么?

      $.ajax({
        type: "GET",
        url: url,
        data: JSON.stringify({  listname: listname }),
        contentType: "application/json; charset=utf-8",

//HERE
        dataType: 'json',
        success: function (result) {
              alert(result[0].value);
        },
        error: function (xhr, status, err) {
               alert(err.toString(), 'Error - LoadListItemsHelper');
        }
    });
Run Code Online (Sandbox Code Playgroud)

2.

你回来了

return new Json(new {list = retval}, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)

success: function(result)

您可以像这样访问列表: result.list[index]

success: function (result) {

      for(var i =0; i < result.list.length; i++){

         alert(result.list[i].value);
         alert(result.list[i].status);
      }
}
Run Code Online (Sandbox Code Playgroud)

编辑基于 Aivan Monceller 的评论,您可以这样做:

当您发送时,GET您不需要

contentType: "application/json; charset=utf-8",
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样写你的 Ajax:

      $.ajax({
        type: "GET",
        url: url,
        data: {  listname: listname },

//HERE
        dataType: 'json',
        success: function (result) {
              alert(result[0].value);
        },
        error: function (xhr, status, err) {
               alert(err.toString(), 'Error - LoadListItemsHelper');
        }
    });
Run Code Online (Sandbox Code Playgroud)