【问题标题】:Issue iterating through an object via Ajax call in C# MVC Framework在 C# MVC 框架中通过 Ajax 调用迭代对象的问题
【发布时间】:2018-09-22 13:30:54
【问题描述】:

在我的 AJAX 脚本中迭代 C# MVC 框架中控制器返回的对象时遇到问题。

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 运行时错误:无法获取未定义或空引用的属性“长度”

【问题讨论】:

  • 你为什么返回List&lt;object&gt;?只需返回rnList
  • 感谢您指出错误。我纠正了它。现在我收到此错误:localhost:52273/Scripts/jquery-1.10.2.js 0x800a138f 第 645 行第 4 列未处理的异常 - JavaScript 运行时错误:无法获取未定义或空引用的属性“长度”
  • 您需要在问题edit 提供更多详细信息,请勿将其作为 cmets 提供。您应该使用的问题正下方有一个edit 链接。
  • 你遇到了什么错误?

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


【解决方案1】:

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"); }
        }
    });
}

【讨论】:

  • 感谢您指出错误。我纠正了它。现在我得到这个错误: localhost:52273/Scripts/jquery-1.10.2.js 0x800a138f 中第 645 行第 4 列的未处理异常 - JavaScript 运行时错误:无法获取未定义或空引用的属性“长度”
  • @anand 你是否也修改了$.each(data, function (items) { 部分?
  • @anand 实际上,我认为您对.each 的回调定义错误-第一个参数是索引(只是一个数字),而不是当前对象。请参阅我刚刚进行的更正,另请参阅api.jquery.com/jquery.each 了解详细信息。您还应该在尝试循环之前检查是否填充了 data - 如果结果集为空,则无法循环。
  • 谢谢!你们真棒。我能够迭代对象。
  • @an 没问题。在这种情况下,请将答案标记为已接受和/或投票。谢谢。
【解决方案2】:

我想指出两个问题

  1. 您无需添加到List&lt;object&gt;

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

您需要返回 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);
            });

        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 2021-07-24
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多