【问题标题】:Problem with JSONResultJSONResult 的问题
【发布时间】:2010-03-18 11:00:43
【问题描述】:

我还是新手,所以我会尝试解释我在做什么。基本上我想要的是根据前一个的值加载一个下拉列表,我希望它加载数据并在另一个更改时出现。这是我在控制器中编写的代码:

public ActionResult GetClassesSearch(bool ajax, string phylumID, string kingdom){
  IList<TaxClass> lists = null;
  int _phylumID = int.Parse(phylumID);
  int _kingdom = int.Parse(kingdom);
  lists = _taxon.getClassByPhylumSearch(_phylumID, _kingdom);
  return Json(lists.count);
}

这就是我从 javascript 函数中调用方法的方式:

function loadClasses(_phylum) {
 var phylum = _phylum.value;

 $.getJSON("/Suspension/GetClassesSearch/",
         { ajax: true,
             phylumID: phylum,
             kingdom: kingdom
         },
         function(data) {
             alert(data);
             alert('no fallo')
             document.getElementById("pClass").style.display = "block";
             document.getElementById("sClass").options[0] = new Option("-select-", "0", true, true);
             //for (i = 0; i < data.length; i++) {
             //   $('#sClass').addOption(data[i].classID, data[i].className);
             //}
         });

}

相关的 HTML 是:

<p id="pPhylum">
                <%= Html.Label("Phylum: ") %>
                <%= Html.DropDownList("sPhylum",
                          (SelectList)ViewData["PhyRecID"],
                      "--Select One--",
                      new { onchange = "loadClasses(this);" }
                      )%>
</p>
<p id="pClass">
                <%= Html.Label("Class: ") %> <select id="sClass"></select>
</p>

问题是它就像这样工作,我将所选门中的类数传递给函数,并显示 pclass 元素,当我尝试用数据填充 slist 时出现问题(它应该包含从数据库中检索的对象),因为当数据库返回的数据更改 return Json(lists) 而不是 return Json(lists.count) 我不断收到相同的错误:

在序列化“SubSonic.Schema.DatabaseColumn”类型的对象时检测到循环引用。

我一直在进行调试和测试,但我无法让它工作,这应该是一件简单的事情,但我错过了一些东西。我评论了 for 循环,因为我不太确定这是否是您访问数据的方式,因为当它找到记录时我无法使其工作。谁能帮帮我?

提前致谢, 维克多

【问题讨论】:

  • 错误是什么?调用是否成功,您可以单步执行控制器方法吗?
  • 是的,它通过控制器方法,显然列表计数为0,所以我可能在sql部分做错了,我会看看它,但无论如何,使用这段代码,它不应该至少加载带有“全选”选项的下拉 sClass 吗?错误已解决,这是一个很奇怪的错误,但这是因为我调用了错误的函数,虽然不是很具体,但我想通了。谢谢:)
  • 所以你有一个 ID = "sClass" 的选择列表??? (只是想验证)
  • 另外,您不想使用.add(newOptionObj, index).remove(index) 方法在您的选择列表中添加/删除选项吗?
  • 是的,我有 ID sclass,一开始我只想看到选项加载,并且一旦有这个工作填充它。

标签: c# javascript asp.net-mvc asp.net-ajax


【解决方案1】:

最后我解决了这个问题。问题是 JSON 出于某种原因无法显示相互引用的对象,这些对象在外键和其他东西方面存在问题。我只使用数据库中需要的字段创建了一个新类,并使用 foreach 语句填充它。然后我将填充的 IList 传递给 return Json 并且它起作用了......

感谢大家的帮助, 维克多

【讨论】:

  • 这对我帮助很大。看起来我有类似的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多