通过C#MVC框架中的Ajax调用来迭代遍历对象

时间:2018-04-12 11:51:53

标签: c# json ajax asp.net-mvc serialization

我在使用我的AJAX脚本中的C#MVC框架中的控制器返回的Object时遇到问题。

Ajax脚本:

function getRName(obj) {
    $.ajax({
        url: 'resourceNamePopup',
        method: 'post',
        data: { "search": obj.value },
        dataType: 'json',
        success: function (data) {
            alert('success');
            $.each(data.items, function (items) {
                alert(items.displayName);
            });

        }
    });
}

C#动作:

    public ActionResult resourceNamePopup(string search)
    {
        List<ResourceName> rnList = new List<ResourceName>();
        rnList = getResourceName(search);

        return Json(rnList );
    }

我现在收到此错误

  

http://localhost:52273/Scripts/jquery-1.10.2.js

第645栏第4行未处理的异常      

0x800a138f - JavaScript运行时错误:无法获取未定义或空引用的属性“长度”

2 个答案:

答案 0 :(得分:0)

obj似乎只是一个单一列表的无意义包装。您只需要向obj添加一个项目,因此将其作为列表实际上没有任何用处。只需直接返回rnList即可。然后在JS中直接循环data。此外,您返回一个没有属性的Object列表这一事实意味着您的所有属性都没有被序列化为JSON,因为它使用被序列化的对象类型来决定在JSON中包含哪些内容。

这应该更好,更简单:

C#

public ActionResult resourceNamePopup(string search)
{
    List<ResourceName> rnList = getResourceName(search);
    return Json(rnList);
}

JS

function getRName(obj) {
    $.ajax({
        url: 'resourceNamePopup',
        method: 'post',
        data: { "search": obj.value },
        dataType: 'json',
        success: function (data) {
            alert('success');
            if (data != null || data.length == 0) {
              $.each(data, function (index, item) {
                alert(item.displayName);
              });
            }
            else { alert("No results"); }
        }
    });
}

答案 1 :(得分:0)

我想指出两个问题

  1. 您无需添加到List<object>

  2. $.each(data.items, function (items)部分不正确

  3. 您需要返回rnList(来自方法resourceNamePopup() [另请使方法和属性名称以大写字母开头] )。

    并在AJAX响应中使用:

    function getRName(obj) {
        $.ajax({
            url: 'resourceNamePopup',
            method: 'post',
            data: { "search": obj.value },
            dataType: 'json',
            success: function (data) {
                alert('success');
                $.each(data, function (i) {
                    alert(data[i].displayName);
                });
    
            }
        });
    }