JSONResult的问题

时间:2010-03-18 11:00:43

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

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

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时应该得到问题(应该包含从数据库中检索的对象),因为当数据库返回的数据改变返回Json(列表)而不是返回Json(lists.count)时,我不断得到同样的错误:

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

我一直在进行调试和测试但是我无法使其工作,并且它被认为是一件简单的事情,但我遗漏了一些东西。我已经对for循环进行了评论,因为我不太确定这是否是您访问数据的方式,因为我找不到记录时无法使其工作。任何人都可以帮助我吗?

提前致谢, 维克多

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题。问题是JSON由于某种原因无法显示彼此引用的对象,这些对象存在外键和内容问题。我使用数据库中需要的字段创建了一个新类,并使用foreach语句填充它。然后我将那个填充的IList传递给返回的Json并且它有效......

谢谢大家的帮助, 维克多